J'ai fait quelques tests pour comprendre comment cela fonctionne avec Swift, les résultats m'ont un peu surpris. Avec les objets ObjC po
appelle debugDescription
qui appelle par défaut description
. C'est clair. Malheureusement, la même chose ne s'applique pas lorsque vous travaillez avec des classes Swift. Je me suis concentré sur les objets plutôt que sur l'impression de variables uniques.
Pour le faire fonctionner (commande po
dans lldb
) J'ai dû redéfinir la description. Ci-dessous le code I utilisé pour le test:
class Test : NSObject
{
var name : String?
var surname : String?
override var debugDescription : String{
return "debugDescription method"
}
override var description : String {
return "description Method"
}
}
Test:
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
La chose qui m'a surpris est que po
sur des objets Swift appelle description
plutôt que debugDescription
qui diffère de ObjC.
EDIT
Pour le faire agir comme avec ObjC, votre classe doivent mettre en œuvre CustomDebugStringConvertible et po
appellera debugDescription
, qui par défaut appelle description
.La seule chose qui doivent être changé dans mon exemple serait d'ajouter:
class Test : NSObject, CustomDebugStringConvertible
Reference
Vérifié avec XCode 7.0.1
et iOS SDK 9
, Swift 2.0
Eh oui, le débogage à Swift est actuellement tributaire de 'println'. – Jack
J'ai eu une erreur de débogueur similaire qui a seulement eu lieu en essayant d'inspecter les constantes 'let'; voir ma question à ce sujet [ici] (http://stackoverflow.com/questions/26189424/how-to-view-value-of-swift-let-constant-in-xcode-6-debugger) -il s'est avéré être un bug dans Xcode 6. –
Il semble y avoir un appel pour les exemples de code/projets qui présentent ces problèmes, de la part de l'équipe du compilateur: https://devforums.apple.com/message/1106278#1106278. Toute contribution à cette cause serait sûrement appréciée par tous (et serait certainement un jolly-good-fellow) –