104 votes

Swift équivalent de Java toString()

Qu'est-ce que la Swift équivalent de Java toString() imprimer l'état d'une instance de classe?

133voto

vacawama Points 91151

L' description est bien ce que vous cherchez. C'est la propriété qui est accessible lorsque vous imprimez une variable contenant un objet.

Vous pouvez ajouter description de vos propres classes en adoptant le protocole CustomStringConvertible , puis la mise en œuvre de l' description de la propriété.

class MyClass: CustomStringConvertible {
    var val = 17

    public var description: String { return "MyClass: \(val)" }
}

let myobj = MyClass()
myobj.val = 12
print(myobj)  // "MyClass: 12"

description est également utilisé lorsque vous appelez l' String constructeur de:

let str = String(myobj)  // str == "MyClass: 12"

Cette méthode est recommandée pour accéder à l'instance de la description (par opposition à l' myobj.description qui ne fonctionnera pas si une classe n'implémente CustomStringConvertible)

7voto

ruan65 Points 402

Si il est possible d'utiliser la structure au lieu de la classe), rien à faire.

struct juste tirages fine à la sortie

print("\(yourStructInstance)")

ou avec la classe comme ceci:

print(String(describing: yourClassInstance))

6voto

Ewan Mellor Points 5183

Vous devez utiliser String(obj).

Directement à partir de la documentation pour CustomStringConvertible:

NOTE

Chaîne de caractères(exemple) va travailler pour une instance de n'importe quel type, de retour de son description si l'instance se trouve être CustomStringConvertible. À l'aide de CustomStringConvertible comme une contrainte générique, ou l'accès à une conforme au type de description directement, c'est donc déconseillée.

5voto

Vishman Points 133

Comment c'est fait avec NSObject étendue des classes

Si votre modèle de classe de l'extension d' NSObject, vous devez remplacer la Variable description comme suit:

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}"
}

Vous pouvez vérifier la façon dont je l'ai fait ici, au sein de l' Country classe, dans le "CountryPicker iOS bibliothèque Swift".

Ou, pour le rendre plus simple pour vous de comprendre, de votre classe et description méthode devrait ressembler à ce qui suit:

public class MyClass: NSObject {
   public var memberAttribute = "I'm an attribute"

   public override var description: String {
       return "My Class member: \(self.memberAttribute)"
   }
}

Note: Depuis que vous êtes à l'extension de votre classe Modale de NSObject il ne nécessite pas, pour votre classe, pour se conformer à la CustomStringConvertible classe, et de plus, vous écrasez description variable à partir de l' NSObject de la classe elle-même. Rappelez-vous toujours, CustomStringConvertible est principalement la pure Swift moyen d'y parvenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X