Quel est l'équivalent Swift de Java toString()
pour imprimer l'état d'une instance de classe?
Quel est l'équivalent Swift de Java toString()
pour imprimer l'état d'une instance de classe?
Réponses:
La description
propriété est ce que vous recherchez. Il s'agit de la propriété accessible lorsque vous imprimez une variable contenant un objet.
Vous pouvez ajouter description
à vos propres classes en adoptant le protocole CustomStringConvertible
, puis en implémentant la description
propriété.
class MyClass: CustomStringConvertible {
var val = 17
public var description: String { return "MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12
print(myobj) // "MyClass: 12"
description
est également utilisé lorsque vous appelez le String
constructeur:
let str = String(myobj) // str == "MyClass: 12"
C'est la méthode recommandée pour accéder à la description de l'instance (par opposition à celle myobj.description
qui ne fonctionnera pas si une classe n'est pas implémentée CustomStringConvertible
)
String(obj)
?
.debugDescription
une version plus conviviale pour les programmeurs
Vous devriez utiliser String(obj)
.
Directement à partir de la documentation de CustomStringConvertible :
REMARQUE
String (instance) fonctionnera pour une instance de n'importe quel type, renvoyant sa description si l'instance se trouve être CustomStringConvertible. L'utilisation de CustomStringConvertible comme contrainte générique, ou l'accès direct à la description d'un type conforme, est donc déconseillée.
description()
méthode de CustomStringConvertible
serait suffisante.
NSObject
les classes étenduesSi votre classe de modèle est étendue à partir de NSObject
, vous devez remplacer la variable description
comme suit:
public override var description: String {
return "\n{\n index: \(self.index),\n"
+ " country: \(self.name),\n"
+ " isoCountryCode: \(self.isoCountryCode),\n"
+ " localeId: \(self.localeId),\n"
+ " flagImageName: \(self.flagImageName!)\n}"
}
Vous pouvez vérifier comment je l'ai fait ici au sein de la Country
classe , dans la "Bibliothèque CountryPicker iOS Swift" .
Ou, pour simplifier votre compréhension, votre classe et votre description
méthode doivent ressembler à ceci:
public class MyClass: NSObject {
public var memberAttribute = "I'm an attribute"
public override var description: String {
return "My Class member: \(self.memberAttribute)"
}
}
Remarque:
puisque vous étendez votre classe Modal à partir de NSObject
celle-ci, il n'est plus nécessaire que votre classe soit conforme à la CustomStringConvertible
classe, et vous remplacez la description
variable de la NSObject
classe elle-même. Rappelez-vous toujours que CustomStringConvertible
c'est principalement la manière pure Swift d'y parvenir.