Convertir Int a String en Swift


554

Estoy tratando de averiguar cómo convertir un Inten un Stringen Swift.

Me imagino una solución alternativa, usando, NSNumberpero me encantaría descubrir cómo hacerlo todo en Swift.

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

Respuestas:


961

Convirtiendo Inta String:

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

Y al revés: convertir Stringa Int:

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

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

O si estás usando Swift 2 o 3:

let x: Int? = Int(myString)

2
Mientras esto funciona, use la toStringfunción, que se muestra en una respuesta a continuación.
ybakos

2
Intno parece tener un toString()método al menos no en Xcode 6.2 edit: veo que hay un toStringmétodo global ( no Int.toString() ), ¿alguien sabe la ventaja sobre el uso del String()constructor?
Nilloc

Tenga en cuenta que String(Int?)escribe "Opcional (Int)", al menos en Swift 2, que no podría ser lo que quería decir. Usar en su lugarInt?.description
Teejay

Maravilloso, pero no funciona para mí. Tengo un Int opcional, y String (myInt) no se compilará: dice "Int? No se puede convertir a String". No hay métodos toString () o toInt () disponibles para mí, o stringValue e intValue no están allí. Incluso un String (myInt!) Me dirá que se ha cambiado el nombre del inicializador a algo como String (que describe: myInt!).
Motti Shneor

99
Para Swift 4, vea la respuesta de Hamed Gh a continuación. El uso correcto esString(describing: x)
David Gay

92

Verifique la siguiente respuesta:

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

45
meh, esta es una solución fea e innecesaria cuando Stringun constructor ya está aceptandoInt
Gabriele Petronella

3
¿Qué mal encuentras esto? ¿Por qué bajas el voto? @GabrielePetronella
PREMKUMAR

2
Es simplemente una forma terrible de lograr el resultado deseado. Sin embargo, la respuesta es técnicamente correcta, y por esta razón no voté en contra.
Gabriele Petronella

No creo que esto sea particularmente feo, excepto que algunas herramientas de análisis pueden no manejar bien la interpolación de cadenas. De lo contrario, quién sabe, podría ser más rápido. Usar "" + x en Javascript es generalmente más rápido que usar un constructor de cadenas, por ejemplo. Este ejemplo es solo un par de caracteres más corto, pero ciertamente preferiría la interpolación de cadenas en los casos en que estaba construyendo una oración a partir de varias variables.
Desty

1
No rechazaría esta respuesta solo porque es feo, pero como dijo @GabrielePetronella, no hay necesidad de usar la interpolación de cadenas cuando Stringtiene un constructor que acepta un Int. Es mucho más claro y conciso.
Isuru

58

Aquí hay 4 métodos:

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

Me imagino que algunas personas tendrán un problema con ss. Pero si estaba buscando construir una cadena que contenga otro contenido, ¿por qué no?


55
Acabo de ver algunos de los nuevos cursos de Stanford U en Swift e iOS 8. Su var ss = "\(x)"ejemplo es exactamente cómo aconsejaron convertir un doble en una cadena. Lo cual me pareció fácil y genial.
markhunte

Y pensar más en sass, eso es realmente malo.
Ian Bradbury

2
toString ha cambiado su nombre a String
Jirson Tavera el

1
s es ahora (Swift 3.1) Cadena (que describe: x) la sintaxis anterior produce un error del compilador.
Motti Shneor

3
@ MottiShneor No, esto está mal. String(describing:)nunca debe usarse para otra cosa que no sea la depuración. No es el inicializador de cadena normal.
Eric Aya

55

En Swift 3.0 :

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

77
Esto está mal. String(describing:)nunca debe usarse para otra cosa que no sea la depuración. No es el inicializador de cadena normal.
Eric Aya

¿Esto sigue mal en Swift 5? @ayaio, porque basándome en la documentación no parece mal
Zonily Jame

27

Swift 4 :

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

Developer.Apple.com> String> init (que describe :)

El inicializador de cadena (que describe :) es la forma preferida de convertir una instancia de cualquier tipo en una cadena.

Cadena personalizada convertible

ingrese la descripción de la imagen aquí


3
resultado Opcional (1)
Harshil Kotecha

11
Esto está mal. String(describing:)nunca debe usarse para otra cosa que no sea la depuración. No es el inicializador de cadena normal.
Eric Aya

3
Hamed Gh, Morithz ya proporciona la respuesta correcta en la misma pregunta. Comprueba mi respuesta. Solo usa el inicializador String () normal. Pero no le des una opción, desenvuelve primero. O, como en tu ejemplo, usa ??. Así: let str = String (x ?? 0)
Harshil Kotecha

2
@HamedGh Mira los ejemplos en el enlace que te das a ti mismo. El describingmétodo está aquí para ... describir su contenido. Da una descripción. A veces es lo mismo que la conversión, a veces no . Dale una opción a describingy verás el resultado ... No será una conversión. Hay una forma simple y dedicada de convertir: usando el inicializador de cadena normal, como se explica en otras respuestas. Lea la página completa a la que se vincula: vea que este método busca descripciones de diferentes maneras, algunas de las cuales arrojarían resultados incorrectos si espera una conversión precisa ...
Eric Aya

2
Realmente deberías eliminar la parte descriptiva de esta respuesta. La conversión debe hacerse sin usar ningún nombre de parámetro en el constructor de cadenas.
TimTwoToes

26

Solo para completar, también puede usar:

let x = 10.description

o cualquier otro valor que admita una descripción.


55
Esto funcionó para mí cuando trataba de mostrar el valor en una etiqueta. Con los otros enfoques siempre fue Opcional (0) en lugar de 0. Gracias
Hardcore_Graverobber

11

Swift 4:

Intentando mostrar el valor en la etiqueta sin la palabra Opcional () .

aquí x es un valor Int usando.

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

3
No. String(describing:)nunca debe usarse para otra cosa que no sea la depuración. No es el inicializador de cadena normal.
Eric Aya

Hola @ Moritz, ¿qué puedo hacer para eliminar la palabra opcional? Tengo un valor Int y lo que quiero imprimir en la etiqueta
Harshil Kotecha

Solo usa el String()inicializador normal . Pero no le des una opción, desenvuelve primero. O, como en tu ejemplo, usa ??. Así:let str = String(x ?? 0)
Eric Aya


Es principalmente para fines de depuración. Puede describir el nombre de las clases, obtener la descripción de las instancias, etc. Pero nunca debe usarse para cadenas que se usan en la propia aplicación.
Eric Aya

8

Para ahorrar tiempo y molestias en el futuro, puede hacer una extensión Int. Por lo general, creo un archivo de código compartido donde pongo extensiones, enumeraciones y otras cosas divertidas. Así es como se ve el código de extensión:

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

Luego, cuando desee convertir un int en una cadena, simplemente puede hacer algo como:

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

Pregunta potencialmente estúpida, pero ¿debería ser una función o una variable calculada? No recuerdo cuál Swift usa normalmente en estos casos, es toInto toInt().
Maury Markowitz

1
Para ahorrarte algo de tiempo y molestias, solo úsalo myNumber.description. No hay necesidad de extensiones.
nyg

8

en SWIFT 3.0 así es como podemos convertir Inta Stringy StringaInt

//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
En la última línea del código, ¿por qué necesitamos un signo de exclamación al final?
Omar Tariq

@OmarTariq, porque explícitamente le decimos al compilador que el integerValuetipo es Int. entonces no puede tener un valor nulo para ello. entonces el compilador le dice que lo desenvuelva. si quieres evitar esto, úsalo como let integerValue = Int(stringValue). entonces no tendrás un problema. lo siento por la respuesta tardía.
Chanaka Caldera

1
@OmarTariq Desenvolver en este caso puede ser realmente malo. Si la cadena no es un número, esto bloqueará su aplicación. Realmente debe verificar para asegurarse de que sea válido y no forzar el desenvolvimiento.
Charlie Fish

7

Por alguna razón, la respuesta aceptada no funcionó para mí. Fui con este enfoque:

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

5

Múltiples formas de hacer esto:

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

iam usando este enfoque simple

Cadena a Int:

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

y de Int a String:

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

2

Convierta Unicode Int a String

Para aquellos que desean convertir un Int en una cadena Unicode, pueden hacer lo siguiente:

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 alternativamente:

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

@jvarela, esto todavía funciona. Acabo de volver a probarlo en Xcode 8.2 (Swift 3.0.2). El Stringinicializador puede tomar un UnicodeScalar.
Suragch


0

Para convertir cadenas en int

var numberA = Int("10")

Print(numberA) // It will print 10

Para convertir Int en String

var numberA = 10

1er camino)

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

2da forma)

var strSomeNumber = String(numberA)

o

var strSomeNumber = "\(numberA)"


0

En swift 3.0, puede cambiar un entero a una cadena como se indica a continuación

let a:String = String(stringInterpolationSegment: 15)

Otra forma es

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

// o cualquier número entero en lugar de 15


1
De la referencia API "No llame a este inicializador directamente. El compilador lo utiliza al interpretar las interpolaciones de cadenas". Es posible que desee verificar si lo está utilizando en alguna parte.
Rahul Sharma

0

Prefiero usar la interpolación de cadenas

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

Cada objeto tiene alguna representación de cadena. Esto hace las cosas más simples. Por ejemplo, si necesita crear algunos Stringcon múltiples valores. También puedes hacer cálculos matemáticos o usar algunas condiciones

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

0

Si le gusta la extensión rápida, puede agregar el siguiente código

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

entonces, puede obtener una cadena por el método que acaba de agregar

var x = 1234
var s = x.string


-1
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.