Подтвердить что ты не робот

Swift: определить, какой объект называется функцией?

Я пишу код Swift, и мне бы хотелось узнать класс объекта, который вызвал эту функцию. Я не хочу передавать какие-либо параметры. Изнутри функции я хочу знать, кто ее назвал.

Любое предложение?

4b9b3361

Ответ 1

Если вы хотите сделать это с помощью swift, вы можете сделать это:

func debug(file: String = #file, line: Int = #line, function: String = #function) -> String {
    return "\(file):\(line) : \(function)"
}

Это довольно просто. Игнорируйте подсветку синтаксиса, это неправильно.

Ответ 2

Чтобы получить доступ к базовому классу метода изнутри, используйте свойство dynamicType:

 self.dynamicType

Если вы хотите узнать происхождение исходного вызова, вы можете использовать NSThread для возврата информации об отладке в стек:

 NSThread.callStackSymbols()

Этот метод возвращает описательный массив значений, который вы использовали для просмотра при выделении исключений. Строки представляют собой обратную трассировку всей текущей активности в стеке вызовов.

Я не хочу быть самонадеянным, но мне кажется, что за пределами отладки нет веской причины, по крайней мере, концептуально, чтобы узнать происхождение конкретного вызова метода для любой функции. Если вам нужно получить класс Тип последнего вызова метода в стеке, почему бы не реализовать интерфейс, который позволяет получить доступ к этой информации с помощью простого маршрута?

Ответ 3

Вы можете использовать следующий шаблон, чтобы узнать, из какого файла, номера строки в файле и функции вызывается функция someFunction:

func someFunction(file: String = #file, line: Int = #line, function: String = #function)
{
    NSLog("\(file.lastPathComponent):\(line) : \(function)")
}

Ответ 4

Swift 2.2:

print("\(self.debugDescription) \(#line) \(#function)")

или добавьте параметр (sender: Anyobject) в эту функцию, а затем напечатайте отправителя (вызывающего функцию) следующим образом:

func yourFunc(sender: AnyObject){
     print(sender)
}