2016-04-13 10 views
36

Was ist das Swift-Äquivalent von Java .toString(), um den Status einer Klasseninstanz zu drucken?Schnelles Äquivalent von Java .toString()

+0

Mehr info @ http://stackoverflow.com/questions/24068506/how-can- i-change-the-textual-representation-displayed-for-ein-type-in-swift –

Antwort

53

Die description Eigenschaft ist, was Sie suchen. Auf diese Eigenschaft wird zugegriffen, wenn Sie eine Variable drucken, die ein Objekt enthält.

Sie können description zu Ihren eigenen Klassen hinzufügen, indem Sie das Protokoll übernehmen und anschließend die description-Eigenschaft implementieren.

let str = String(myobj) // str == "MyClass: 12" 

nicht Dies ist die empfohlene Methode für den Zugriff auf die Instanz Beschreibung (im Gegensatz zu myobj.description, die nicht funktionieren, wenn eine Klasse tut:

class MyClass: CustomStringConvertible { 
    var val = 17 

    public var description: String { return "MyClass: \(val)" } 
} 

let myobj = MyClass() 
myobj.val = 12 
print(myobj) // "MyClass: 12" 

description ist auch, wenn Sie den String Konstruktor aufrufen verwendet implementieren)

+0

Was ist mit 'String (obj)'? – nielsbot

+0

Es gibt auch '.debugDescription' für eine programmiererfreundlichere Version – nielsbot

+2

gilt es für Strukturen? – lmiguelvargasf

6

Sie sollten String(obj) verwenden.

Direkt aus the documentation for CustomStringConvertible:

HINWEIS

String (Beispiel) wird für eine Instanz von jeder Art arbeiten, seine Beschreibung der Rückkehr, wenn die Instanz CustomStringConvertible sein geschieht. Die Verwendung von CustomStringConvertible als generische Einschränkung oder der direkte Zugriff auf eine konforme Typbeschreibung wird daher nicht empfohlen.

+0

Scheint wie die 'description()' Methode von 'CustomStringConvertible' wäre ausreichend. –

4

Wenn es möglich ist, die Struktur statt der Klasse zu verwenden, dann nichts weiter zu tun.

struct gerade druckt fein selbst an den Ausgang

print("\(yourStructInstance)") 

oder mit Klasse wie folgt:

print(String(describing: yourClassInstance))