Я пишу код Swift, и мне бы хотелось узнать класс объекта, который вызвал эту функцию. Я не хочу передавать какие-либо параметры. Изнутри функции я хочу знать, кто ее назвал.
Любое предложение?
Я пишу код Swift, и мне бы хотелось узнать класс объекта, который вызвал эту функцию. Я не хочу передавать какие-либо параметры. Изнутри функции я хочу знать, кто ее назвал.
Любое предложение?
Если вы хотите сделать это с помощью swift, вы можете сделать это:
func debug(file: String = #file, line: Int = #line, function: String = #function) -> String {
return "\(file):\(line) : \(function)"
}
Это довольно просто. Игнорируйте подсветку синтаксиса, это неправильно.
Чтобы получить доступ к базовому классу метода изнутри, используйте свойство dynamicType
:
self.dynamicType
Если вы хотите узнать происхождение исходного вызова, вы можете использовать NSThread
для возврата информации об отладке в стек:
NSThread.callStackSymbols()
Этот метод возвращает описательный массив значений, который вы использовали для просмотра при выделении исключений. Строки представляют собой обратную трассировку всей текущей активности в стеке вызовов.
Я не хочу быть самонадеянным, но мне кажется, что за пределами отладки нет веской причины, по крайней мере, концептуально, чтобы узнать происхождение конкретного вызова метода для любой функции. Если вам нужно получить класс Тип последнего вызова метода в стеке, почему бы не реализовать интерфейс, который позволяет получить доступ к этой информации с помощью простого маршрута?
Вы можете использовать следующий шаблон, чтобы узнать, из какого файла, номера строки в файле и функции вызывается функция someFunction:
func someFunction(file: String = #file, line: Int = #line, function: String = #function)
{
NSLog("\(file.lastPathComponent):\(line) : \(function)")
}
Swift 2.2:
print("\(self.debugDescription) \(#line) \(#function)")
или добавьте параметр (sender: Anyobject)
в эту функцию, а затем напечатайте отправителя (вызывающего функцию) следующим образом:
func yourFunc(sender: AnyObject){
print(sender)
}