Dans Swift 3, la structure String
ne semble pas avoir un init(_: Int)
initialiseur qui permette la conversion de Int
en String
Ma question est pourquoi est-ce que let i = String(3)
fonctionne? Quelle méthode ou initialiseur String
appelle-t-il? Merci.
Il appelle init(_:)
(ou init(_:)
pour UnsignedInteger
) les arguments de String
class.
Au lieu de définir des initialiseurs distincts pour Int
, Int64
, Int32
, Int16
, Int8
, UInt
, UInt64
, UInt32
, UInt16
et UInt8
, Apple a créé deux initialiseurs génériques: un pour les types SignedInteger
et un pour les types UnsignedInteger
.
Pour ceux qui cherchent simplement à convertir un int en chaîne dans Swift 3:
let text = "\(myInt)"
Pour les personnes souhaitant convertir des entiers facultatifs en chaînes sur Swift 3,
String(describing:YourInteger ?? 0)
J'ai vu cette solution à quelqu'un, merci à cette personne, je ne me souviens plus 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")"