Was ist das Swift-Äquivalent von Java toString()
zum Drucken des Status einer Klasseninstanz?
Was ist das Swift-Äquivalent von Java toString()
zum Drucken des Status einer Klasseninstanz?
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 übernehmen CustomStringConvertible
und dann die description
Eigenschaft implementieren .
class MyClass: CustomStringConvertible {
var val = 17
public var description: String { return "MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12
print(myobj) // "MyClass: 12"
description
wird auch verwendet, wenn Sie den String
Konstruktor aufrufen :
let str = String(myobj) // str == "MyClass: 12"
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 wird CustomStringConvertible
).
String(obj)
?
.debugDescription
für eine programmiererfreundlichere Version
Du solltest benutzen String(obj)
.
Direkt aus der Dokumentation zu CustomStringConvertible :
HINWEIS
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.
description()
Methode CustomStringConvertible
ausreichend.
NSObject
erweiterten Klassen gemacht wirdWenn Ihre Modellklasse von erweitert wird NSObject
, müssen Sie die Variable description
wie folgt überschreiben :
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}"
}
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:
public class MyClass: NSObject {
public var memberAttribute = "I'm an attribute"
public override var description: String {
return "My Class member: \(self.memberAttribute)"
}
}
Hinweis:
Da Sie Ihre Modal-Klasse erweitern, muss Ihre Klasse NSObject
nicht CustomStringConvertible
mehr mit der Klasse description
übereinstimmen , und Sie überschreiben die Variable aus der NSObject
Klasse selbst. Denken Sie immer daran, CustomStringConvertible
ist meistens der reine Swift-Weg, um dies zu erreichen.