Convertir Int en chaîne dans Swift

554

J'essaie de trouver un moyen de lancer un Intdans StringSwift.

Je trouve une solution de contournement, en utilisant NSNumbermais j'aimerais savoir comment tout faire dans Swift.

let x : Int = 45
let xNSNumber = x as NSNumber
let xString : String = xNSNumber.stringValue
Steve Marshall
la source

Réponses:

961

Conversion Inten String:

let x : Int = 42
var myString = String(x)

Et l'inverse - conversion Stringen Int:

let myString : String = "42"
let x: Int? = myString.toInt()

if (x != nil) {
    // Successfully converted String to Int
}

Ou si vous utilisez Swift 2 ou 3:

let x: Int? = Int(myString)
Shai
la source
2
Pendant que cela fonctionne, utilisez la toStringfonction indiquée dans une réponse ci-dessous.
ybakos
2
Intne semble pas avoir une toString()méthode du moins pas dans l'édition Xcode 6.2: je vois qu'il y a une toStringméthode globale ( pas Int.toString() ), quelqu'un sait-il l'avantage d'utiliser le String()constructeur?
Nilloc
Notez que String(Int?)écrit "Facultatif (Int)", au moins dans Swift 2, ce ne pouvait pas être ce que vous vouliez dire. Utilisez à la placeInt?.description
Teejay
Merveilleux, mais ne fonctionne pas pour moi. J'ai un Int facultatif, et String (myInt) ne compilera pas - il prétend "Int? Ne peut pas être converti en String". Aucune méthode toString () ou toInt () n'est disponible pour moi non plus, ou stringValue et intValue ne sont pas là. Même une chaîne (myInt!) Me dira que l'initialiseur a été renommé en quelque chose comme String (décrivant: myInt!).
Motti Shneor
9
Pour Swift 4, voir la réponse de Hamed Gh ci-dessous. L'utilisation correcte estString(describing: x)
David Gay
92

Vérifiez la réponse ci-dessous:

let x : Int = 45
var stringValue = "\(x)"
print(stringValue)
PREMKUMAR
la source
45
meh, c'est une solution de contournement laide et inutile quand Stringun constructeur accepte déjàInt
Gabriele Petronella
3
quel mal vous trouvez cela? pourquoi avez-vous mis le vote? @GabrielePetronella
PREMKUMAR
2
c'est juste une façon terrible d'atteindre le résultat souhaité. La réponse est cependant techniquement correcte, et pour cette raison, je n'ai pas voté contre.
Gabriele Petronella
Je ne pense pas que ce soit particulièrement moche, sauf que certains outils d'analyse peuvent ne pas gérer correctement l'interpolation de chaînes. Sinon, qui sait - cela pourrait être plus rapide. Utiliser "" + x en Javascript est généralement plus rapide que d'utiliser un constructeur String, par exemple. Cet exemple n'est que de quelques caractères plus court, mais je préférerais certainement l'interpolation de chaînes dans les cas où vous construisiez une phrase à partir de plusieurs variables.
Desty
1
Je ne voterais pas contre cette réponse simplement parce que c'est moche, mais comme @GabrielePetronella l'a dit, il n'est pas nécessaire d'utiliser l'interpolation de chaîne quand Stringun constructeur accepte un Int. C'est beaucoup plus clair et concis.
Isuru du
58

Voici 4 méthodes:

var x = 34
var s = String(x)
var ss = "\(x)"
var sss = toString(x)
var ssss = x.description

Je peux imaginer que certaines personnes auront un problème avec les art. Mais si vous cherchez à construire une chaîne contenant un autre contenu, pourquoi pas.

Ian Bradbury
la source
5
Je viens de regarder une partie du nouveau cours de Stanford U sur Swift et iOS 8. Votre var ss = "\(x)"exemple est exactement la façon dont ils ont conseillé de convertir un double en chaîne. Ce que j'ai trouvé facile et génial.
Markhunte
Et penser plus à sass - c'est vraiment mauvais.
Ian Bradbury
2
toString a été renommé String
Jirson Tavera
1
s est maintenant (Swift 3.1) String (décrivant: x) l'ancienne syntaxe génère une erreur de compilation.
Motti Shneor
3
@MottiShneor Non, c'est faux. String(describing:)ne doit jamais être utilisé pour autre chose que le débogage. Ce n'est pas l'initialiseur de chaîne normal.
Eric Aya
55

Dans Swift 3.0 :

var value: Int = 10
var string = String(describing: value)
vladiulianbogdan
la source
7
C'est faux. String(describing:)ne doit jamais être utilisé pour autre chose que le débogage. Ce n'est pas l'initialiseur de chaîne normal.
Eric Aya
Est-ce toujours faux dans Swift 5? @ayaio, car en se basant sur la documentation, cela ne semble pas faux
Zonily Jame
27

Swift 4 :

let x:Int = 45
let str:String = String(describing: x)

Developer.Apple.com> String> init (décrivant :)

L'initialiseur String (décrivant :) est le moyen préféré pour convertir une instance de n'importe quel type en chaîne.

Convertible de chaîne personnalisée

entrez la description de l'image ici

Hamed Ghadirian
la source
3
résultat Facultatif (1)
Harshil Kotecha
11
C'est faux. String(describing:)ne doit jamais être utilisé pour autre chose que le débogage. Ce n'est pas l'initialiseur de chaîne normal.
Eric Aya
3
Hamed Gh, Morithz fournit déjà la bonne réponse dans la même question vérifier ma réponse Utilisez simplement l'initialiseur String () normal. Mais ne lui donnez pas une option, déballez d'abord. Ou, comme dans votre exemple, utilisez ??. Comme ceci: let str = String (x ?? 0)
Harshil Kotecha
2
@HamedGh Regardez les exemples dans le lien que vous vous donnez. La describingméthode est là pour ... décrire son contenu. Il donne une description. Parfois, c'est la même chose que la conversion, parfois non . Donnez une option à describinget vous verrez le résultat ... Ce ne sera pas une conversion. Il existe un moyen simple et dédié de convertir: en utilisant l'initialiseur de chaîne normal, comme expliqué dans d'autres réponses. Lisez la page complète à laquelle vous liez: voyez que cette méthode recherche des descriptions en utilisant différentes manières, dont certaines donneraient des résultats erronés si vous vous attendez à une conversion précise.
Eric Aya
2
Vous devriez vraiment supprimer la partie descriptive de cette réponse. La conversion doit être effectuée sans utiliser de nom de paramètre dans le constructeur String.
TimTwoToes
26

Pour être complet, vous pouvez également utiliser:

let x = 10.description

ou toute autre valeur prenant en charge une description.

Mike Lischke
la source
5
Cela a fonctionné pour moi lorsque j'essayais d'afficher la valeur dans une étiquette. Avec les autres approches, c'était toujours facultatif (0) au lieu de 0. Merci
Hardcore_Graverobber
11

Swift 4:

Essayer d'afficher la valeur dans l'étiquette sans le mot Facultatif () .

ici x est une valeur Int utilisant.

let str:String = String(x ?? 0)
Harshil Kotecha
la source
3
Non. String(describing:)Ne doit jamais être utilisé pour autre chose que le débogage. Ce n'est pas l'initialiseur de chaîne normal.
Eric Aya
Bonjour @Moritz, que puis-je faire pour supprimer le mot facultatif? j'ai une valeur Int et que je veux imprimer dans l'étiquette
Harshil Kotecha
Utilisez simplement l' String()initialiseur normal . Mais ne lui donnez pas une option, déballez d'abord. Ou, comme dans votre exemple, utilisez ??. Comme ça:let str = String(x ?? 0)
Eric Aya
developer.apple.com/documentation/swift/string/2427941-init je comprends votre point de vue à quoi sert la description
Harshil Kotecha
C'est principalement à des fins de débogage. Vous pouvez décrire le nom des classes, obtenir la description des instances, etc. Mais il ne doit jamais être utilisé pour les chaînes utilisées dans l'application elle-même.
Eric Aya
8

Pour vous faire gagner du temps et des tracas à l'avenir, vous pouvez créer une extension Int. En général, je crée un fichier de code partagé dans lequel je mets des extensions, des énumérations et d'autres éléments amusants. Voici à quoi ressemble le code d'extension:

extension Int
{
    func toString() -> String
    {
        var myString = String(self)
        return myString
    }
}

Plus tard, lorsque vous souhaitez convertir un int en chaîne, vous pouvez simplement faire quelque chose comme:

var myNumber = 0
var myNumberAsString = myNumber.toString()
user2266987
la source
Question potentiellement stupide, mais devrait-il s'agir d'une fonction ou d'une variable calculée? Je ne me souviens pas lequel Swift utilise normalement dans ces cas - est-ce toIntou toInt().
Maury Markowitz
1
Pour vous faire gagner du temps et des tracas, utilisez simplement myNumber.description. Pas besoin d'extensions.
2017
8

dans swift 3.0 voici comment nous pouvons convertir Intvers Stringet StringversInt

//convert Integer to String in Swift 3.0

let theIntegerValue :Int = 123  // this can be var also
let theStringValue :String = String(theIntegerValue)


//convert String to Integere in Swift 3.0


let stringValue : String = "123"
let integerValue : Int = Int(stringValue)!
Chanaka Caldera
la source
1
Dans la dernière ligne du code, pourquoi avons-nous besoin d'un point d'exclamation à la fin?
Omar Tariq
@OmarTariq, car nous indiquons explicitement au compilateur que le integerValuetype de est Int. ne peut alors pas avoir de valeur nulle. donc le compilateur vous dit de le déballer. si vous voulez éviter cela, utilisez-le comme let integerValue = Int(stringValue). alors vous n'aurez pas de problème. Désolé pour la réponse tardive.
Chanaka Caldera
1
@OmarTariq Le déballage dans ce cas peut être vraiment mauvais. Si la chaîne n'est pas un nombre, cela bloquera votre application. Vous devriez vraiment vérifier pour vous assurer qu'il est valide et ne pas forcer le déballage.
Charlie Fish
7

pour une raison quelconque, la réponse acceptée n'a pas fonctionné pour moi. Je suis allé avec cette approche:

var myInt:Int = 10
var myString:String = toString(myInt)
bkopp
la source
5

Plusieurs façons de procéder:

var str1:String="\(23)"
var str2:String=String(format:"%d",234)
Dhruv Ramani
la source
4

Swift 2:

var num1 = 4
var numString = "56"
var sum2 = String(num1) + numString
var sum3 = Int(numString)
juanmorillios
la source
2

iam utilise cette approche simple

Chaîne en Int:

 var a = Int()
var string1 = String("1")
a = string1.toInt()

et de Int à String:

var a = Int()
a = 1
var string1 = String()
 string1= "\(a)"
Muraree Pareek
la source
2

Convertir Unicode Int en chaîne

Pour ceux qui souhaitent convertir un Int en une chaîne Unicode, vous pouvez effectuer les opérations suivantes:

let myInteger: Int = 97

// convert Int to a valid UnicodeScalar
guard let myUnicodeScalar = UnicodeScalar(myInteger) else {
    return ""
}

// convert UnicodeScalar to String
let myString = String(myUnicodeScalar)

// results
print(myString) // a

Ou bien:

let myInteger: Int = 97
if let myUnicodeScalar = UnicodeScalar(myInteger) {
    let myString = String(myUnicodeScalar)
}
Suragch
la source
@jvarela, cela fonctionne toujours. Je viens de le retester dans Xcode 8.2 (Swift 3.0.2). L' Stringinitialiseur peut prendre a UnicodeScalar.
Suragch
1

exampleLabel.text = String(yourInt)

Michael
la source
0

Pour convertir String en Int

var numberA = Int("10")

Print(numberA) // It will print 10

Pour convertir Int en chaîne

var numberA = 10

1ère voie)

print("numberA is \(numberA)") // It will print 10

2ème voie)

var strSomeNumber = String(numberA)

ou

var strSomeNumber = "\(numberA)"
Anil Kukadeja
la source
0
let a =123456888
var str = String(a)

OU

var str = a as! String
Amul4608
la source
Votre deuxième exemple ne fonctionnera pas avec un Int.
John Montgomery
0

Dans swift 3.0, vous pouvez changer un entier en chaîne comme indiqué ci-dessous

let a:String = String(stringInterpolationSegment: 15)

Une autre façon est

let number: Int = 15
let _numberInStringFormate: String = String(number)

// ou tout nombre entier à la place de 15

Dilip Jangid
la source
1
D'après la référence de l'API "N'appelez pas cet initialiseur directement. Il est utilisé par le compilateur lors de l'interprétation des interpolations de chaînes." Peut-être voulez-vous vérifier si vous l'utilisez quelque part.
Rahul Sharma
0

Je préfère utiliser l' interpolation de chaînes

let x = 45
let string = "\(x)"

Chaque objet a une représentation sous forme de chaîne. Cela simplifie les choses. Par exemple, si vous devez en créer Stringavec plusieurs valeurs. Vous pouvez également faire des calculs ou utiliser certaines conditions

let text = "\(count) \(count > 1 ? "items" : "item") in the cart. Sum: $\(sum + shippingPrice)"
Robert Dresler
la source
0

Si vous aimez l'extension swift, vous pouvez ajouter le code suivant

extension Int
{
    var string:String {
        get {
            return String(self)
        }
    }
}

ensuite, vous pouvez obtenir une chaîne par la méthode que vous venez d'ajouter

var x = 1234
var s = x.string
Lai Lee
la source
-1
let Str = "12"
let num: Int = 0
num = Int (str)
Paulo Silva
la source
-1
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
Roi Zakai
la source