2016-10-22 1 views
8

Dans Swift 3, la structure String ne semble pas avoir un initialiseur init(_: Int) qui permettra la conversion d'un Int à un String. Ma question est la suivante: pourquoi fonctionne let i = String(3)? Quelle méthode String ou initialisateur appelle-t-il? Merci.Swift 3 conversion de Int à la chaîne

Répondre

9

Il appelle init(_:) (ou init(_:) pour UnsignedInteger) arguments de la classe String.

Plutôt que de définir initializers séparés pour Int, Int64, Int32, Int16, Int8, UInt, UInt64, UInt32, UInt16 et UInt8, Apple a fait deux initialiseurs génériques: l'un pour SignedInteger types, et un pour UnsignedInteger types.

29

Pour quiconque cherche juste à convertir un int en chaîne dans Swift 3:

let text = "\(myInt)" 
+0

Votre réponse n'a pas abordé la question –

+3

d'accord avec le commentaire, mais cela m'a aidé avec ce que je cherchais – Josh

+0

vous remercie !!!! –

5

Pour les personnes qui veulent convertir en option Entiers Strings sur Swift 3,

String(describing:YourInteger ?? 0) 
+1

C'est le compilateur Swift qui m'a incité à passer à la description, pas moi! pas moi! – satheeshwaran

0

J'ai vu cette solution à quelqu'un, merci, à cette personne, je ne me souviens pas de qui.

infix operator ???: NilCoalescingPrecedence 

public func ???<T>(optional: T?, defaultValue: @autoclosure() -> String) -> String { 
    switch optional { 
    case let value?: return String(describing: value) 
    case nil: return defaultValue() 
    } 
} 

Par exemple:

let text = "\(yourInteger ??? "0")" 
+0

Pourriez-vous élaborer sur la façon de mettre en œuvre cela ... s'il vous plaît? –

+0

J'ai UtilsView.swift, dans cette bibliothèque j'ai d'autres fonctions que j'utilise dans tous les projets. Une fonction est, opérateur d'infixe ???: NilCoalescingPrecedence fonction publique ??? (en option: T ?, defaultValue: @autoclosure() -> String) -> Chaîne {{ commutateur optionnel cas Apprécions ?: retour String (description: valeur) nul cas: retour defaultValue() }} – Mercedes