Die descriptionImmobilie ist das, wonach Sie suchen. Auf diese Eigenschaft wird zugegriffen, wenn Sie eine Variable drucken, die ein Objekt enthält.
Sie können descriptionIhre eigenen Klassen erweitern, indem Sie das Protokoll übernehmen CustomStringConvertibleund dann die descriptionEigenschaft implementieren .
descriptionwird auch verwendet, wenn Sie den StringKonstruktor aufrufen :
let str =String(myobj)// str =="MyClass: 12"
Dies ist die empfohlene Methode für den Zugriff auf die Instanzbeschreibung (im Gegensatz dazu myobj.descriptionfunktioniert sie nicht, wenn eine Klasse nicht implementiert wird CustomStringConvertible).
Es gibt auch .debugDescriptionfür eine programmiererfreundlichere Version
Nielsbot
2
gilt es für Strukturen?
lmiguelvargasf
1
Ja, CustomStringConvertible ersetzt Printable. @ Antonio, ich erinnere mich nicht, wann es sich geändert hat, aber es war sicherlich lange vor Swift 3.
vacawama
1
Die MyClass muss von NSObject
DàChún
7
Wenn es möglich ist, die Struktur anstelle der Klasse zu verwenden, ist nichts weiter zu tun.
String (Instanz) funktioniert für eine Instanz eines beliebigen Typs und gibt ihre Beschreibung zurück, wenn die Instanz zufällig CustomStringConvertible ist. Es wird daher davon abgeraten, CustomStringConvertible als generische Einschränkung zu verwenden oder direkt auf die Beschreibung eines konformen Typs zuzugreifen.
Oder , um es einfacher für Sie zu verstehen, Ihre Klasse und descriptionMethode wie folgt aussehen:
publicclassMyClass:NSObject{publicvar memberAttribute ="I'm an attribute"publicoverridevar description:String{return"My Class member: \(self.memberAttribute)"}}
Hinweis:
Da Sie Ihre Modal-Klasse erweitern, muss Ihre Klasse NSObjectnicht CustomStringConvertiblemehr mit der Klasse descriptionübereinstimmen , und Sie überschreiben die Variable aus der NSObjectKlasse selbst. Denken Sie immer daran, CustomStringConvertibleist meistens der reine Swift-Weg, um dies zu erreichen.
Antworten:
Die
description
Immobilie ist das, wonach Sie suchen. Auf diese Eigenschaft wird zugegriffen, wenn Sie eine Variable drucken, die ein Objekt enthält.Sie können
description
Ihre eigenen Klassen erweitern, indem Sie das Protokoll übernehmenCustomStringConvertible
und dann diedescription
Eigenschaft implementieren .description
wird auch verwendet, wenn Sie denString
Konstruktor aufrufen :Dies ist die empfohlene Methode für den Zugriff auf die Instanzbeschreibung (im Gegensatz dazu
myobj.description
funktioniert sie nicht, wenn eine Klasse nicht implementiert wirdCustomStringConvertible
).quelle
String(obj)
?.debugDescription
für eine programmiererfreundlichere VersionWenn es möglich ist, die Struktur anstelle der Klasse zu verwenden, ist nichts weiter zu tun.
struct druckt sich nur gut auf die Ausgabe
oder mit Klasse wie dieser:
quelle
Du solltest benutzen
String(obj)
.Direkt aus der Dokumentation zu CustomStringConvertible :
quelle
description()
MethodeCustomStringConvertible
ausreichend.Wie es gemacht wird
NSObject
erweiterten Klassen gemacht wirdWenn Ihre Modellklasse von erweitert wird
NSObject
, müssen Sie die Variabledescription
wie folgt überschreiben :Sie können hier in der
Country
Klasse in der "CountryPicker iOS Swift-Bibliothek" überprüfen, wie ich es gemacht habe .Oder , um es einfacher für Sie zu verstehen, Ihre Klasse und
description
Methode wie folgt aussehen:Hinweis: Da Sie Ihre Modal-Klasse erweitern, muss Ihre Klasse
NSObject
nichtCustomStringConvertible
mehr mit der Klassedescription
übereinstimmen , und Sie überschreiben die Variable aus derNSObject
Klasse selbst. Denken Sie immer daran,CustomStringConvertible
ist meistens der reine Swift-Weg, um dies zu erreichen.quelle