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
Steve Marshall
fonte

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)
Shai
fonte
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)
PREMKUMAR
fonte
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?

Ian Bradbury
fonte
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)
vladiulianbogdan
fonte
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

Hamed Ghadirian
fonte
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.

Mike Lischke
fonte
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)
Harshil Kotecha
fonte
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
developer.apple.com/documentation/swift/string/2427941-init eu entendo seu ponto que é o uso de descrever
Harshil Kotecha
É 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()
user2266987
fonte
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)!
Chanaka Caldera
fonte
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)
bkopp
fonte
5

Várias maneiras de fazer isso:

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

Swift 2:

var num1 = 4
var numString = "56"
var sum2 = String(num1) + numString
var sum3 = Int(numString)
juanmorillios
fonte
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)"
Muraree Pareek
fonte
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)
}
Suragch
fonte
@ jvarela, isso ainda funciona. Acabei de testá-lo novamente no Xcode 8.2 (Swift 3.0.2). O Stringinicializador pode levar a UnicodeScalar.
Suragch
1

exampleLabel.text = String(yourInt)

Michael
fonte
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)"
Anil Kukadeja
fonte
0
let a =123456888
var str = String(a)

OU

var str = a as! String
Amul4608
fonte
Seu segundo exemplo não funcionará com um Int.
John Montgomery
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

Dilip Jangid
fonte
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)"
Robert Dresler
fonte
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
Lai Lee
fonte
-1
let Str = "12"
let num: Int = 0
num = Int (str)
Paulo Silva
fonte
-1
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
Roi Zakai
fonte