O descriptionimó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 CustomStringConvertiblee, em seguida, implementando a descriptionpropriedade.
classMyClass: CustomStringConvertible{
var val = 17publicvar description: String { return"MyClass: \(val)" }
}
let myobj = MyClass()
myobj.val = 12print(myobj) // "MyClass: 12"
descriptiontambém é usado quando você chama o Stringconstrutor:
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.descriptionque não funcionará se uma classe não implementar CustomStringConvertible)
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.
Ou, para torná-lo mais simples de entender, sua classe e descriptionmétodo devem ser assim:
publicclassMyClass: NSObject{
publicvar memberAttribute = "I'm an attribute"publicoverridevar description: String {
return"My Class member: \(self.memberAttribute)"
}
}
Nota:
Como você está estendendo sua classe Modal, NSObjectela não exige mais que sua classe esteja em conformidade com a CustomStringConvertibleclasse e você está substituindo a descriptionvariável da NSObjectprópria classe. Lembre-se sempre de que CustomStringConvertibleé principalmente a maneira pura do Swift de conseguir isso.
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 protocoloCustomStringConvertible
e, em seguida, implementando adescription
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 oString
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 implementarCustomStringConvertible
)fonte
String(obj)
?.debugDescription
uma versão mais amigável ao programadorSe for possível usar a estrutura em vez da classe, nada adicional a fazer.
struct apenas imprime bem na saída
print("\(yourStructInstance)")
ou com classe como esta:
print(String(describing: yourClassInstance))
fonte
Você deve usar
String(obj)
.Direto da documentação para CustomStringConvertible :
fonte
description()
método deCustomStringConvertible
seria suficiente.Como isso é feito com
NSObject
aulas estendidasSe sua classe de modelo for estendida de
NSObject
, você deve substituir a variável dadescription
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 aCustomStringConvertible
classe e você está substituindo adescription
variável daNSObject
própria classe. Lembre-se sempre de queCustomStringConvertible
é principalmente a maneira pura do Swift de conseguir isso.fonte