Converti Int in String in Swift


554

Sto cercando di capire come lanciare un Intin a Stringin Swift.

Ho trovato una soluzione alternativa, usando NSNumberma mi piacerebbe capire come fare tutto in Swift.

let x : Int = 45
let xNSNumber = x as NSNumber
let xString : String = xNSNumber.stringValue

Risposte:


961

Conversione Intin String:

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

E viceversa, convertendo Stringin Int:

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

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

O se stai usando Swift 2 o 3:

let x: Int? = Int(myString)

2
Mentre funziona, utilizza la toStringfunzione, mostrata in una risposta di seguito.
ybakos,

2
Intnon sembra avere un toString()metodo almeno non nella modifica di Xcode 6.2: vedo che esiste un toStringmetodo globale ( no Int.toString() ), qualcuno conosce il vantaggio rispetto all'utilizzo del String()costruttore?
Nilloc,

Nota che String(Int?)scrive "Opzionale (Int)", almeno in Swift 2, che non potrebbe essere quello che volevi dire. Usa inveceInt?.description
Teejay,

Meraviglioso, ma non funziona per me. Ho un Int opzionale e String (myInt) non verrà compilato - afferma che "Int? Non può essere convertito in String". Non ci sono metodi toString () o toInt () disponibili per me, o stringValue e intValue non presenti. Anche una stringa (myInt!) Mi dirà che l'inizializzatore è stato rinominato in qualcosa come String (descrivendo: myInt!).
Motti Shneor,

9
Per Swift 4, vedi la risposta di Hamed Gh di seguito. L'uso corretto èString(describing: x)
David Gay,

92

Controlla la risposta di seguito:

let x : Int = 45
var stringValue = "\(x)"
print(stringValue)

45
meh, questa è una brutta e inutile soluzione alternativa quando Stringha già un costruttore che accettaInt
Gabriele Petronella,

3
che male trovi questo? perché metti voto? @GabrielePetronella
PREMKUMAR,

2
è solo un modo terribile per ottenere il risultato desiderato. La risposta è tecnicamente corretta, tuttavia, e per questo motivo non ho votato.
Gabriele Petronella,

Non penso che sia particolarmente brutto, tranne per il fatto che alcuni strumenti di analisi potrebbero non gestire bene l'interpolazione di stringhe. Altrimenti, chi lo sa - potrebbe essere più veloce. L'uso di "" + x in Javascript è generalmente più veloce rispetto all'utilizzo di un costruttore di stringhe, ad esempio. Questo esempio è più corto di un paio di caratteri, ma preferirei sicuramente l'interpolazione di stringhe nei casi in cui stavi costruendo una frase da più variabili.
Desty,

1
Non vorrei sottovalutare questa risposta solo perché è brutta, ma come ha detto @GabrielePetronella, non è necessario utilizzare l'interpolazione di stringhe quando Stringha un costruttore che accetta un Int. È molto più chiaro e conciso.
Isuru,

58

Ecco 4 metodi:

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

Posso immaginare che alcune persone avranno un problema con ss. Ma se stavi cercando di creare una stringa contenente altro contenuto, allora perché no.


5
Guardo solo alcuni dei nuovi corsi di Stanford U su Swift e iOS 8. Il tuo var ss = "\(x)"esempio è esattamente come hanno consigliato di convertire un doppio in una stringa. Che pensavo fosse facile e fantastico.
markhunte,

E pensare di più al sass - è davvero un male.
Ian Bradbury,

2
toString è stato rinominato String
Jirson Tavera

1
s è ora (Swift 3.1) String (che descrive: x) la sintassi precedente produce un errore di compilazione.
Motti Shneor,

3
@MottiShneor No, questo è sbagliato. String(describing:)non dovrebbe mai essere usato per nient'altro che debug. Non è il normale inizializzatore di stringhe.
Eric Aya,

55

In Swift 3.0 :

var value: Int = 10
var string = String(describing: value)

7
Questo è sbagliato. String(describing:)non dovrebbe mai essere usato per nient'altro che debug. Non è il normale inizializzatore di stringhe.
Eric Aya,

È ancora sbagliato in Swift 5? @ayaio, poiché basarsi sulla documentazione non sembra sbagliato
Zonily Jame,

27

Swift 4 :

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

Developer.Apple.com> String> init (che descrive :)

L'iniziatore String (che descrive :) è il modo preferito per convertire un'istanza di qualsiasi tipo in una stringa.

Convertibile stringa personalizzata

inserisci qui la descrizione dell'immagine


3
risultato Opzionale (1)
Harshil Kotecha

11
Questo è sbagliato. String(describing:)non dovrebbe mai essere usato per nient'altro che debug. Non è il normale inizializzatore di stringhe.
Eric Aya,

3
Hamed Gh, Morithz fornisce già la risposta giusta nella stessa domanda controlla la mia risposta Usa solo il normale inizializzatore String (). Ma non dargli un optional, scartalo prima. Oppure, come nel tuo esempio, usa ??. In questo modo: let str = String (x ?? 0)
Harshil Kotecha,

2
@HamedGh Guarda gli esempi nel link che ti dai. Il describingmetodo è qui per ... descriverne il contenuto. Dà una descrizione. A volte è uguale alla conversione, a volte no . Dai un facoltativo a describinge vedrai il risultato ... Non sarà una conversione. Esiste un modo semplice e dedicato per la conversione: usare il normale inizializzatore di stringhe, come spiegato in altre risposte. Leggi la pagina completa a cui ti colleghi: vedi che questo metodo cerca le descrizioni usando modi diversi, alcuni dei quali darebbero risultati errati se ti aspetti una conversione accurata ..
Eric Aya,

2
Dovresti davvero rimuovere la parte descrittiva di questa risposta. La conversione deve essere eseguita senza utilizzare alcun nome di parametro nel costruttore String.
TimTwoToes

26

Solo per completezza, puoi anche usare:

let x = 10.description

o qualsiasi altro valore che supporti una descrizione.


5
Questo ha funzionato per me quando ho cercato di mostrare il valore in un'etichetta. Con gli altri approcci era sempre Opzionale (0) invece di 0. Grazie
Hardcore_Graverobber

11

Swift 4:

Tentativo di mostrare il valore nell'etichetta senza la parola opzionale () .

qui x è un valore Int che utilizza.

let str:String = String(x ?? 0)

3
No. String(describing:)non dovrebbe mai essere usato per nient'altro che debug. Non è il normale inizializzatore di stringhe.
Eric Aya,

Ciao @Moritz, quindi cosa posso fare per rimuovere la parola opzionale? ho un valore Int e che voglio stampare in etichetta
Harshil Kotecha

Usa l' String()inizializzatore normale . Ma non dargli un optional, scartalo prima. Oppure, come nel tuo esempio, usa ??. In questo modo:let str = String(x ?? 0)
Eric Aya,


È principalmente per scopi di debug. Puoi descrivere il nome delle classi, ottenere la descrizione delle istanze, ecc. Ma non dovrebbe mai essere usato per le stringhe utilizzate nell'app stessa.
Eric Aya,

8

Per risparmiare tempo e fatica in futuro, puoi creare un'estensione Int. In genere creo un file di codice condiviso in cui inserisco estensioni, enumerazioni e altre cose divertenti. Ecco come appare il codice di estensione:

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

Quindi, quando vuoi convertire un int in una stringa, puoi semplicemente fare qualcosa del tipo:

var myNumber = 0
var myNumberAsString = myNumber.toString()

Domanda potenzialmente stupida, ma dovrebbe essere una funzione o una variabile calcolata? Non riesco a ricordare quale Swift normalmente usa in questi casi - vero toInto no toInt().
Maury Markowitz,

1
Per risparmiare un po 'di tempo e fatica basta usare myNumber.description. Non sono necessarie estensioni.
nyg

8

in Swift 3.0 è così che possiamo convertire Intin Stringe StringinInt

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

1
Nell'ultima riga del codice, perché è necessario un punto esclamativo alla fine?
Omar Tariq

@OmarTariq, perché diciamo esplicitamente al compilatore che il integerValuetipo è Int. quindi non può avere un valore nullo per questo. così il compilatore ti dice di scartarlo. se vuoi evitarlo, usalo come let integerValue = Int(stringValue). allora non avrai problemi. Scusa per il ritardo della risposta.
Chanaka Caldera,

1
@OmarTariq In questo caso, il suo involucro può essere davvero negativo. Se la stringa non è un numero, si verificherà un arresto anomalo dell'applicazione. Dovresti davvero controllare per accertarti che sia valido e non forzare scartarlo.
Charlie Fish

7

per qualunque motivo la risposta accettata non ha funzionato per me. Sono andato con questo approccio:

var myInt:Int = 10
var myString:String = toString(myInt)

5

Diversi modi per farlo:

var str1:String="\(23)"
var str2:String=String(format:"%d",234)

4

Swift 2:

var num1 = 4
var numString = "56"
var sum2 = String(num1) + numString
var sum3 = Int(numString)

2

usando questo semplice approccio

Stringa a Int:

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

e da Int a String:

var a = Int()
a = 1
var string1 = String()
 string1= "\(a)"

2

Converti Unicode Int in String

Per coloro che desiderano convertire un Int in una stringa Unicode, è possibile effettuare le seguenti operazioni:

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

O in alternativa:

let myInteger: Int = 97
if let myUnicodeScalar = UnicodeScalar(myInteger) {
    let myString = String(myUnicodeScalar)
}

@jvarela, funziona ancora. L'ho appena riprovato in Xcode 8.2 (Swift 3.0.2). L' Stringinizializzatore può richiedere a UnicodeScalar.
Suragch,


0

Per convertire String in Int

var numberA = Int("10")

Print(numberA) // It will print 10

Per convertire Int in String

var numberA = 10

1a via)

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

2a via)

var strSomeNumber = String(numberA)

o

var strSomeNumber = "\(numberA)"


0

In swift 3.0, puoi cambiare il numero intero in stringa come indicato di seguito

let a:String = String(stringInterpolationSegment: 15)

Un altro modo è

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

// o qualsiasi numero intero al posto di 15


1
Dal riferimento API "Non chiamare questo inizializzatore direttamente. Viene utilizzato dal compilatore per l'interpretazione delle interpolazioni di stringa." Magari vuoi ricontrollare se lo stai usando da qualche parte.
Rahul Sharma,

0

Preferisco usare l' interpolazione di stringhe

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

Ogni oggetto ha una rappresentazione in forma di stringa. Questo rende le cose più semplici. Ad esempio se è necessario crearne alcuni Stringcon più valori. Puoi anche fare qualsiasi matematica o usare alcune condizioni

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

0

Se ti piace l'estensione rapida, puoi aggiungere il seguente codice

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

quindi, puoi ottenere la stringa con il metodo che hai appena aggiunto

var x = 1234
var s = x.string


-1
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.