Я сделал несколько тестов, чтобы выяснить, как это работает со Swift, результаты меня немного удивили. С объектами ObjC po
вызывает debugDescription
, который по умолчанию вызывает description
. Это ясно. К сожалению, то же самое не применяется при работе с классами Swift. Я сосредоточился на объектах, а не на печати отдельных переменных.
Чтобы заставить его работать (команда po
в lldb
), мне пришлось переопределить описание. Ниже код, который я использовал для тестирования:
class Test : NSObject
{
var name : String?
var surname : String?
override var debugDescription : String{
return "debugDescription method"
}
override var description : String {
return "description Method"
}
}
Тестирование:
let test = Test()
test.name = "name"
test.surname = "surname"
(lldb) po test
description Method
(lldb) p test
(DebugTest.Test) $R1 = 0x00007fce11404860 {
ObjectiveC.NSObject = {
isa = DebugTest.Test
}
name = "name"
surname = "surname"
}
(lldb) po dump(test)
▿ DebugTest.Test #0
- super: debugDescription method
▿ name: name
- Some: name
▿ surname: surname
- Some: surname
description Method
(lldb) po print(test)
description Method
Что меня удивило, так это то, что po
в объектах Swift вызывает description
, а не debugDescription
, что отличается от ObjC.
ИЗМЕНИТЬ
Чтобы он работал как с ObjC, ваш класс должен реализовать CustomDebugStringConvertible, а затем po
вызовет debugDescription
, который по умолчанию вызывает description
. Единственное, что нужно изменить в моем примере, это добавить:
class Test : NSObject, CustomDebugStringConvertible
Справочник
Проверено с XCode 7.0.1
и iOS SDK 9
, Swift 2.0
person
Julian
schedule
21.10.2015
println
. - person Jack   schedule 16.07.2014let
константы; см. мой вопрос об этом здесь — это оказалось ошибкой в Xcode 6. - person George WS   schedule 11.10.2014