Converter Int em String no Swift


554

Estou tentando descobrir como Inttransformar um Stringem um em Swift.

Eu descobri uma solução alternativa, usando, NSNumbermas adoraria descobrir como fazer tudo isso no Swift.

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

Respostas:


961

Convertendo Intpara String:

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

E o contrário - convertendo Stringpara Int:

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

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

Ou se você estiver usando o Swift 2 ou 3:

let x: Int? = Int(myString)

2
Enquanto isso funcionar, use a toStringfunção, mostrada na resposta abaixo.
ybakos

2
Intparece não ter um toString()método pelo menos não no Xcode 6.2 edit: Vejo que existe um toStringmétodo global ( não Int.toString() ), alguém conhece a vantagem de usar o String()construtor?
Nilloc 13/04/2015

Observe que String(Int?)escreve "Opcional (Int)", pelo menos no Swift 2, que não pode ser o que você quis dizer. Utilize vezInt?.description
Teejay

Maravilhoso, mas não funciona para mim. Eu tenho um Int opcional e String (myInt) não será compilado - ele afirma que "Int? Não pode ser convertido em String". Não há métodos toString () ou toInt () disponíveis para mim, ou stringValue e intValue não existem. Mesmo uma String (myInt!) Me diz que o inicializador foi renomeado para algo como String (descrevendo: myInt!).
Motti Shneor 9/03

9
Para Swift 4, veja a resposta de Hamed Gh abaixo. O uso correto éString(describing: x)
David Gay

92

Verifique a resposta abaixo:

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

45
meh, esta é uma solução feio e desnecessário quando Stringjá tem um construtor aceitarInt
Gabriele Petronella

3
que errado você acha isso? por que você coloca voto? @GabrielePetronella
PREMKUMAR

2
é apenas uma maneira terrível de alcançar o resultado desejado. A resposta é tecnicamente correta, no entanto, e por esse motivo eu não diminuí o voto.
Gabriele Petronella

Eu não acho isso particularmente feio, exceto que algumas ferramentas de análise podem não lidar bem com a interpolação de strings. Caso contrário, quem sabe - pode ser mais rápido. Usar "" + x em Javascript é geralmente mais rápido do que usar um construtor String, por exemplo. Este exemplo é apenas alguns caracteres mais curto, mas eu certamente preferiria a interpolação de strings nos casos em que você estava construindo uma sentença a partir de várias variáveis.
Destino

1
Eu não descartaria essa resposta apenas porque é feia, mas como @GabrielePetronella disse, não há necessidade de usar a interpolação de strings quando Stringum construtor que aceita um Int. É muito mais claro e conciso.
Isuru 15/09

58

Aqui estão 4 métodos:

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

Eu posso imaginar que algumas pessoas terão um problema com ss. Mas se você estava procurando criar uma string contendo outro conteúdo, por que não?


5
Acabei de assistir a alguns dos novos cursos da Stanford U sobre Swift e iOS 8. Seu var ss = "\(x)"exemplo é exatamente como eles recomendaram a conversão de um dobro em uma string. O que eu pensei que era fácil e ótimo.
markhunte 29/01

E pensar mais em sass - isso é muito ruim.
Ian Bradbury

2
toString foi renomeado para String
Jirson Tavera

1
s é agora (Swift 3.1) String (descrevendo: x) a sintaxe mais antiga gera erro do compilador.
Motti Shneor 9/03/2017

3
@MottiShneor Não, isso está errado. String(describing:)nunca deve ser usado para nada além de depuração. Não é o inicializador de String normal.
11558 Eric Aya #

55

No Swift 3.0 :

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

7
Isto está errado. String(describing:)nunca deve ser usado para nada além de depuração. Não é o inicializador de String normal.
Eric Aya

Ainda está errado no Swift 5? @ayaio, causa baseando-se na documentação não parece errado
Zonily Jame

27

Swift 4 :

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

Developer.Apple.com> String> init (descrevendo :)

O inicializador String (descrevendo :) é a maneira preferida de converter uma instância de qualquer tipo em uma string.

Conversão de string personalizada

insira a descrição da imagem aqui


3
resultado Opcional (1)
Harshil Kotecha 31/03

11
Isto está errado. String(describing:)nunca deve ser usado para nada além de depuração. Não é o inicializador de String normal.
Eric Aya

3
Hamed Gh, o Morithz já fornece a resposta certa na mesma pergunta, verifique minha resposta Basta usar o inicializador normal String (). Mas não dê um opcional, desembrulhe primeiro. Ou, como no seu exemplo, use ??. Como esta: vamos str = String (x ?? 0)
Harshil Kotecha

2
@HamedGh Veja os exemplos no link que você fornece. O describingmétodo está aqui para ... descrever seu conteúdo. Dá uma descrição. Às vezes é o mesmo que a conversão, às vezes não . Dê um opcional para describinge você verá o resultado ... Não será uma conversão. Existe uma maneira simples e dedicada de converter: usando o inicializador String normal, conforme explicado em outras respostas. Leia a página completa que você conectar-se a: ver que este método procura por descrições usando formas diferentes, alguns dos quais dariam resultados errados se você espera conversão exata ..
Eric Aya

2
Você realmente deve remover a parte descritiva desta resposta. A conversão deve ser feita sem o uso de nenhum nome de parâmetro no construtor String.
TimTwoToes

26

Apenas para completar, você também pode usar:

let x = 10.description

ou qualquer outro valor que suporte uma descrição.


5
Isso funcionou para mim ao tentar mostrar o valor em um rótulo. Com as outras abordagens, era sempre opcional (0) em vez de 0. Obrigado
Hardcore_Graverobber

11

Swift 4:

Tentando mostrar o valor no rótulo sem a palavra Opcional () .

aqui x é um valor Int usando.

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

3
Não. String(describing:)Nunca deve ser usado para nada além de depuração. Não é o inicializador de String normal.
Eric Aya

Olá @Moritz, o que posso fazer para remover a palavra opcional? i tem um valor Int e do que eu deseja imprimir no rótulo
Harshil Kotecha

Basta usar o String()inicializador normal . Mas não dê um opcional, desembrulhe primeiro. Ou, como no seu exemplo, use ??. Assim:let str = String(x ?? 0)
Eric Aya


É principalmente para fins de depuração. Você pode descrever o nome das classes, obter a descrição das instâncias etc. Mas nunca deve ser usado para strings usadas no próprio aplicativo.
Eric Aya

8

Para economizar tempo e problemas no futuro, você pode fazer uma extensão Int. Normalmente, crio um arquivo de código compartilhado onde coloco extensões, enumerações e outras coisas divertidas. Aqui está a aparência do código de extensão:

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

Depois, quando você quiser converter um int em uma string, você pode fazer algo como:

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

Pergunta potencialmente estúpida, mas isso deveria ser uma função ou uma variável computada? Não me lembro qual Swift normalmente usa nesses casos - é toIntou não toInt().
Maury Markowitz

1
Para poupar algum tempo e aborrecimentos, basta usar myNumber.description. Não há necessidade de extensões.
Nyg 16/08/19

8

no Swift 3.0 é assim que podemos converter Intpara Stringe StringparaInt

//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
Na última linha do código, por que precisamos de um ponto de exclamação no final?
Omar Tariq

@OmarTariq, porque informamos explicitamente ao compilador que esse integerValueé o tipo Int. então não pode ter um valor nulo para ele. então o compilador diz para você desembrulhá-lo. se você quiser evitar isso, use-o como let integerValue = Int(stringValue). então você não terá um problema. Desculpe pelo atraso na resposta.
Chanaka Caldera

1
@OmarTariq Desembrulhar neste caso pode ser muito ruim. Se a sequência não for um número, isso travará seu aplicativo. Você deve realmente verificar se é válido e não forçar a desembrulhar.
Charlie Peixe

7

por qualquer motivo, a resposta aceita não funcionou para mim. Eu fui com esta abordagem:

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

5

Várias maneiras de fazer isso:

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 esta abordagem simples

String para Int:

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

e de Int para String:

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

2

Converter Unicode Int em String

Para aqueles que desejam converter um Int em uma seqüência de caracteres Unicode, você pode fazer o seguinte:

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

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

@ jvarela, isso ainda funciona. Acabei de testá-lo novamente no Xcode 8.2 (Swift 3.0.2). O Stringinicializador pode levar a UnicodeScalar.
Suragch


0

Para converter String em Int

var numberA = Int("10")

Print(numberA) // It will print 10

Para ocultar Int em String

var numberA = 10

1ª via)

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

2ª via)

var strSomeNumber = String(numberA)

ou

var strSomeNumber = "\(numberA)"


0

No swift 3.0, você pode alterar o número inteiro para a string, conforme indicado abaixo

let a:String = String(stringInterpolationSegment: 15)

Outra maneira é

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

// ou qualquer número inteiro no lugar de 15


1
Da referência da API "Não chame esse inicializador diretamente. Ele é usado pelo compilador ao interpretar interpolações de seqüência de caracteres". Pode ser que você queira verificar se está usando em algum lugar.
Rahul Sharma

0

Eu prefiro usar Interpolação de String

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

Cada objeto tem alguma representação de string. Isso torna as coisas mais simples. Por exemplo, se você precisar criar alguns Stringcom vários valores. Você também pode fazer contas ou usar algumas condições

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

0

Se você gosta da extensão rápida, pode adicionar o seguinte código

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

então, você pode obter string pelo método que você acabou de adicionar

var x = 1234
var s = x.string


-1
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.