ios - Equivalente rápido de Java toString()
swift customstringconvertible (4)
¿Cuál es el equivalente rápido de Java
toString()
para imprimir el estado de una instancia de clase?
Cómo se hace con las clases extendidas de
NSObject
Si su clase de modelo se extiende desde
NSObject
, debe anular la
description
la Variable de la siguiente manera:
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}"
}
Puede verificar cómo lo hice
aquí dentro de la clase
Country
, en la
"Biblioteca Swift de CountryPicker para iOS"
.
O,
para que le resulte más fácil de entender, su clase y método de
description
deberían tener el siguiente aspecto:
public class MyClass: NSObject {
public var memberAttribute = "I''m an attribute"
public override var description: String {
return "My Class member: /(self.memberAttribute)"
}
}
Nota:
Dado que está extendiendo su clase Modal desde
NSObject
ya no es necesario que su clase cumpla con la clase
CustomStringConvertible
, y está anulando la variable de
description
de la clase
NSObject
.
Recuerde siempre que
CustomStringConvertible
es principalmente la forma pura y rápida de lograr esto.
Deberías usar
String(obj)
.
Directo de la documentación para CustomStringConvertible :
NOTA
String (instancia) funcionará para una instancia de cualquier tipo, devolviendo su descripción si la instancia es CustomStringConvertible. Por lo tanto, se desaconseja utilizar CustomStringConvertible como una restricción genérica, o acceder directamente a la descripción de un tipo conforme.
La propiedad de
description
es lo que está buscando.
Esta es la propiedad a la que se accede cuando imprime una variable que contiene un objeto.
Puede agregar una
description
a sus propias clases adoptando el protocolo
CustomStringConvertible
y luego implementando la propiedad de
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
también se utiliza cuando se llama al constructor de
String
:
let str = String(myobj) // str == "MyClass: 12"
Este es el método recomendado para acceder a la descripción de la instancia (a diferencia de
myobj.description
que no funcionará si una clase no implementa
CustomStringConvertible
)
Si es posible usar la estructura en lugar de la clase, entonces no hay nada más que hacer.
struct solo imprime bien en la salida
print("/(yourStructInstance)")
o con una clase como esta:
print(String(describing: yourClassInstance))