Qual è l'equivalente Swift di Java .toString() per stampare lo stato di un'istanza di classe?equivalente Swift di Java .toString()
risposta
La proprietà description
è ciò che stai cercando. Questa è la proprietà a cui si accede quando si stampa una variabile contenente un oggetto.
È possibile aggiungere description
alle proprie classi adottando il protocollo CustomStringConvertible
e quindi implementando la proprietà description
.
class MyClass: CustomStringConvertible {
var val = 17
public var description: String { return "MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12
print(myobj) // "MyClass: 12"
description
viene utilizzato anche quando si chiama il costruttore di String
:
let str = String(myobj) // str == "MyClass: 12"
Questo è il metodo consigliato per l'accesso alla descrizione istanza (al contrario di myobj.description
che non funziona se una classe non lo fa attuare CustomStringConvertible
)
Che dire di 'String (obj)'? – nielsbot
C'è anche '.debugDescription' per una versione più adatta ai programmatori – nielsbot
si applica alle strutture? – lmiguelvargasf
È necessario utilizzare String(obj)
.
diretta da the documentation for CustomStringConvertible:
NOTA
String (esempio) funziona per un'istanza di qualsiasi tipo, tornando sua descrizione se l'istanza sembra essere CustomStringConvertible. L'utilizzo di CustomStringConvertible come un vincolo generico o l'accesso diretto a una descrizione del tipo conforme a , è pertanto sconsigliato.
Sembra che il metodo 'description()' di 'CustomStringConvertible' sia sufficiente. –
Se è possibile utilizzare la struct anziché la classe, niente di più da fare.
struct stampa bene stesso per l'uscita
print("\(yourStructInstance)")
o con classe come questa:
print(String(describing: yourClassInstance))
Maggiori info @ http://stackoverflow.com/questions/24068506/how-can- i-change-the-textual-representation-display-for-a-type-in-swift –