Qual é o equivalente Swift de Java toString()
para imprimir o estado de uma instância de classe?
Qual é o equivalente Swift de Java toString()
para imprimir o estado de uma instância de classe?
Respostas:
O description
imóvel é o que procura. Esta é a propriedade que é acessada quando você imprime uma variável contendo um objeto.
Você pode adicionar description
às suas próprias classes adotando o protocolo CustomStringConvertible
e, em seguida, implementando a description
propriedade.
class MyClass: CustomStringConvertible {
var val = 17
public var description: String { return "MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12
print(myobj) // "MyClass: 12"
description
também é usado quando você chama o String
construtor:
let str = String(myobj) // str == "MyClass: 12"
Este é o método recomendado para acessar a descrição da instância (ao contrário do myobj.description
que não funcionará se uma classe não implementar CustomStringConvertible
)
String(obj)
?
.debugDescription
uma versão mais amigável ao programador
Você deve usar String(obj)
.
Direto da documentação para CustomStringConvertible :
NOTA
String (instância) funcionará para uma instância de qualquer tipo, retornando sua descrição se a instância for CustomStringConvertible. Usar CustomStringConvertible como uma restrição genérica ou acessar a descrição de um tipo em conformidade diretamente é, portanto, desencorajado.
description()
método de CustomStringConvertible
seria suficiente.
NSObject
aulas estendidasSe sua classe de modelo for estendida de NSObject
, você deve substituir a variável da description
seguinte maneira:
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}"
}
Você pode conferir como eu fiz isso aqui na Country
aula , na "Biblioteca CountryPicker iOS Swift" .
Ou, para torná-lo mais simples de entender, sua classe e description
método devem ser assim:
public class MyClass: NSObject {
public var memberAttribute = "I'm an attribute"
public override var description: String {
return "My Class member: \(self.memberAttribute)"
}
}
Nota:
Como você está estendendo sua classe Modal, NSObject
ela não exige mais que sua classe esteja em conformidade com a CustomStringConvertible
classe e você está substituindo a description
variável da NSObject
própria classe. Lembre-se sempre de que CustomStringConvertible
é principalmente a maneira pura do Swift de conseguir isso.