Как распечатать стек вызовов в Swift?
В Objective-C вы можете распечатать стек вызовов, выполнив следующие действия:
NSLog(@"%@", [NSThread callStackSymbols]);
Как вы это делаете в Swift без использования класса Foundation?
Ответы
Ответ 1
Как говорит Джейкобсон, используйте следующее:
Swift 2:
print(NSThread.callStackSymbols())
Swift 3:
print(Thread.callStackSymbols)
Этот код Swift. Он использует метод Foundation, но также делает 90% + того, что вы делаете на iOS.
EDIT:
Обратите внимание, что форматирование выглядит лучше, если вы используете:
Thread.callStackSymbols.forEach{print($0)}
В командной строке отладчика вы можете ввести
e Thread.callStackSymbols.forEach{print($0)}
Ответ 2
Для Swift 3 используйте:
print(Thread.callStackSymbols)
или для лучшего форматирования
for symbol: String in Thread.callStackSymbols {
print(symbol)
}
Ответ 3
Это немного улучшает выход.
for symbol: String in NSThread.callStackSymbols() {
NSLog("%@", symbol)
}
Ответ 4
Здесь большой класс полезности, который я нашел на github:
https://github.com/nurun/swiftcallstacktrace
Вы получаете кортеж (класс, метод) любого символа трассировки стека, чтобы вы могли сделать чистую распечатку.
CallStackAnalyser.classAndMethodForStackSymbol(NSThread.callStackSymbols()[2])