ios swift string tostring customstringconvertible

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))