La descriptionproprié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 descriptionpropriété.
classMyClass: CustomStringConvertible{
var val = 17publicvar description: String { return"MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12print(myobj) // "MyClass: 12"
descriptionest également utilisé lorsque vous appelez le Stringconstructeur:
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.descriptionqui ne fonctionnera pas si une classe n'est pas implémentée CustomStringConvertible)
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.
Ou, pour simplifier votre compréhension, votre classe et votre descriptionméthode doivent ressembler à ceci:
publicclassMyClass: NSObject{
publicvar memberAttribute = "I'm an attribute"publicoverridevar description: String {
return"My Class member: \(self.memberAttribute)"
}
}
Remarque:
puisque vous étendez votre classe Modal à partir de NSObjectcelle-ci, il n'est plus nécessaire que votre classe soit conforme à la CustomStringConvertibleclasse, et vous remplacez la descriptionvariable de la NSObjectclasse elle-même. Rappelez-vous toujours que CustomStringConvertiblec'est principalement la manière pure Swift d'y parvenir.
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 protocoleCustomStringConvertible
, puis en implémentant ladescription
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 leString
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éeCustomStringConvertible
)la source
String(obj)
?.debugDescription
une version plus conviviale pour les programmeursS'il est possible d'utiliser la structure au lieu de la classe, alors rien de plus à faire.
struct s'imprime juste finement sur la sortie
print("\(yourStructInstance)")
ou avec une classe comme celle-ci:
print(String(describing: yourClassInstance))
la source
Vous devriez utiliser
String(obj)
.Directement à partir de la documentation de CustomStringConvertible :
la source
description()
méthode deCustomStringConvertible
serait suffisante.Comment c'est fait avec
NSObject
les classes étenduesSi votre classe de modèle est étendue à partir de
NSObject
, vous devez remplacer la variabledescription
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 à laCustomStringConvertible
classe, et vous remplacez ladescription
variable de laNSObject
classe elle-même. Rappelez-vous toujours queCustomStringConvertible
c'est principalement la manière pure Swift d'y parvenir.la source