Qu'est-ce que la Swift équivalent de Java toString()
imprimer l'état d'une instance de classe?
Réponses
Trop de publicités?L' description
est bien ce que vous cherchez. C'est la propriété qui est accessible lorsque vous imprimez une variable contenant un objet.
Vous pouvez ajouter description
de vos propres classes en adoptant le protocole CustomStringConvertible
, puis la mise en œuvre de l' description
de la 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 l' String
constructeur de:
let str = String(myobj) // str == "MyClass: 12"
Cette méthode est recommandée pour accéder à l'instance de la description (par opposition à l' myobj.description
qui ne fonctionnera pas si une classe n'implémente CustomStringConvertible
)
Vous devez utiliser String(obj)
.
Directement à partir de la documentation pour CustomStringConvertible:
NOTE
Chaîne de caractères(exemple) va travailler pour une instance de n'importe quel type, de retour de son description si l'instance se trouve être CustomStringConvertible. À l'aide de CustomStringConvertible comme une contrainte générique, ou l'accès à une conforme au type de description directement, c'est donc déconseillée.
Comment c'est fait avec NSObject
étendue des classes
Si votre modèle de classe de l'extension d' 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 la façon dont je l'ai fait ici, au sein de l' Country
classe, dans le "CountryPicker iOS bibliothèque Swift".
Ou, pour le rendre plus simple pour vous de comprendre, de votre classe et description
méthode devrait ressembler à ce qui suit:
public class MyClass: NSObject {
public var memberAttribute = "I'm an attribute"
public override var description: String {
return "My Class member: \(self.memberAttribute)"
}
}
Note:
Depuis que vous êtes à l'extension de votre classe Modale de NSObject
il ne nécessite pas, pour votre classe, pour se conformer à la CustomStringConvertible
classe, et de plus, vous écrasez description
variable à partir de l' NSObject
de la classe elle-même. Rappelez-vous toujours, CustomStringConvertible
est principalement la pure Swift moyen d'y parvenir.