Konversi Int ke String di Swift


554

Saya mencoba mencari cara untuk melemparkan Intke Stringdalam Swift.

Saya mencari solusi, menggunakan NSNumbertetapi saya ingin mencari tahu bagaimana melakukan semuanya di Swift.

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

Jawaban:


961

Konversi Intke String:

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

Dan sebaliknya - mengkonversi Stringke Int:

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

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

Atau jika Anda menggunakan Swift 2 atau 3:

let x: Int? = Int(myString)

2
Sementara ini berfungsi, gunakan toStringfungsi, yang ditunjukkan dalam jawaban di bawah ini.
ybakos

2
Inttampaknya tidak memiliki toString()metode setidaknya tidak dalam edit Xcode 6.2: Saya melihat bahwa ada toStringmetode global ( tidak Int.toString() ), ada yang tahu keuntungan daripada menggunakan String()konstruktor?
Nilloc

Catatan yang String(Int?)menulis "Opsional (Int)", setidaknya di Swift 2, itu tidak mungkin yang Anda maksud. Gunakan sebagai gantinyaInt?.description
Teejay

Luar biasa, tetapi tidak berhasil untuk saya. Saya memiliki Int opsional, dan String (myInt) tidak dapat dikompilasi - ia mengklaim "Int? Tidak dapat dikonversi ke String". Tidak ada metode toString () atau toInt () yang tersedia untuk saya, atau stringValue dan intValue tidak ada. Bahkan sebuah String (myInt!) Akan memberi tahu saya bahwa initializer telah diubah namanya menjadi sesuatu seperti String (menggambarkan: myInt!).
Motti Shneor

9
Untuk Swift 4, lihat jawaban Hamed Gh di bawah ini. Penggunaan yang benar adalahString(describing: x)
David Gay

92

Periksa Jawaban Di Bawah Ini:

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

45
meh, ini adalah solusi yang buruk dan tidak perlu ketika Stringsudah memiliki konstruktor yang menerimaInt
Gabriele Petronella

3
apa yang salah kamu menemukan ini? mengapa Anda memberikan suara? @GabrielePetronella
PREMKUMAR

2
itu hanya cara mengerikan untuk mencapai hasil yang diinginkan. Namun, jawabannya secara teknis benar, dan untuk alasan ini saya tidak mengundurkan diri.
Gabriele Petronella

Saya tidak berpikir ini sangat jelek, kecuali bahwa beberapa alat parsing mungkin tidak menangani interpolasi string dengan baik. Kalau tidak, siapa tahu - itu mungkin lebih cepat. Menggunakan "" + x dalam Javascript umumnya lebih cepat daripada menggunakan konstruktor String, misalnya. Contoh ini hanya beberapa karakter lebih pendek, tapi saya lebih suka interpolasi string dalam kasus di mana Anda membangun kalimat dari beberapa variabel.
Desty

1
Saya tidak akan menurunkan jawaban ini hanya karena jelek tapi seperti yang dikatakan @GabrielePetronella, tidak perlu menggunakan interpolasi string ketika Stringmemiliki konstruktor yang menerima Int. Jauh lebih jelas dan ringkas.
Isuru

58

Berikut adalah 4 metode:

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

Saya dapat membayangkan bahwa beberapa orang akan memiliki masalah dengan ss. Tetapi jika Anda ingin membuat string yang berisi konten lain, mengapa tidak.


5
Saya baru saja menonton beberapa kursus baru Stanford U di Swift dan iOS 8. var ss = "\(x)"Contoh Anda persis seperti yang mereka sarankan untuk mengubah ganda menjadi string. Yang saya pikir itu mudah dan hebat.
markhunte

Dan berpikir lebih banyak tentang sass - itu benar-benar buruk.
Ian Bradbury

2
toString telah diubah namanya menjadi String
Jirson Tavera

1
s sekarang (Swift 3.1) String (menggambarkan: x) sintaksis lama menghasilkan kesalahan kompiler.
Motti Shneor

3
@MottiShneor Tidak, ini salah. String(describing:)seharusnya tidak pernah digunakan untuk hal lain selain debugging. Ini bukan penginisialisasi String normal.
Eric Aya

55

Di Swift 3.0 :

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

7
Ini salah. String(describing:)seharusnya tidak pernah digunakan untuk hal lain selain debugging. Ini bukan penginisialisasi String normal.
Eric Aya

Apakah ini masih salah di Swift 5? @ayaio, karena mendasarkan pada dokumentasi sepertinya tidak salah
Zonily Jame

27

Swift 4 :

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

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

The String (menggambarkan :) initializer adalah cara yang disukai untuk mengonversi instance dari tipe apa pun menjadi string.

Konversi String Kustom

masukkan deskripsi gambar di sini


3
hasil Opsional (1)
Harshil Kotecha

11
Ini salah. String(describing:)seharusnya tidak pernah digunakan untuk hal lain selain debugging. Ini bukan penginisialisasi String normal.
Eric Aya

3
Hamed Gh, Morithz sudah memberikan jawaban yang benar dalam pertanyaan yang sama, periksa jawaban saya. Gunakan saja initializer String (). Tapi jangan berikan itu opsional, buka dulu. Atau, seperti dalam contoh Anda, gunakan ??. Seperti ini: let str = String (x ?? 0)
Harshil Kotecha

2
@HamedGh Lihat contoh di tautan yang Anda berikan sendiri. The describingMetode sini untuk ... menggambarkan isinya. Itu memberi deskripsi. Terkadang sama dengan konversi, terkadang tidak . Berikan opsional kepada describingdan Anda akan melihat hasilnya ... Ini tidak akan menjadi konversi. Ada cara sederhana dan berdedikasi untuk mengonversi: menggunakan penginisialisasi String normal, seperti yang dijelaskan dalam jawaban lain. Baca halaman lengkap yang Anda tautkan ke: lihat bahwa metode ini mencari deskripsi menggunakan berbagai cara, beberapa di antaranya akan memberikan hasil yang salah jika Anda mengharapkan konversi yang akurat ..
Eric Aya

2
Anda benar-benar harus menghapus bagian yang menjelaskan jawaban ini. Konversi harus dilakukan tanpa menggunakan nama parameter apa pun di konstruktor String.
TimTwoToes

26

Hanya untuk kelengkapan, Anda juga dapat menggunakan:

let x = 10.description

atau nilai lain yang mendukung deskripsi.


5
Ini bekerja untuk saya ketika mencoba menunjukkan nilai dalam label. Dengan pendekatan lain, selalu Opsional (0) dan bukan 0. Terima kasih
Hardcore_Graverobber

11

Swift 4:

Mencoba menunjukkan nilai dalam label tanpa kata opsional () .

di sini x adalah nilai Int yang digunakan.

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

3
Tidak String(describing:)boleh digunakan untuk hal lain selain debugging. Ini bukan penginisialisasi String normal.
Eric Aya

Halo @ Moritz jadi apa yang bisa saya lakukan untuk menghapus kata opsional? saya memiliki nilai Int dan daripada yang ingin saya cetak di label
Harshil Kotecha

Cukup gunakan String()penginisialisasi normal . Tapi jangan berikan itu opsional, buka dulu. Atau, seperti dalam contoh Anda, gunakan ??. Seperti ini:let str = String(x ?? 0)
Eric Aya

developer.apple.com/documentation/swift/string/2427941-init saya mengerti maksud Anda apa gunanya menggambarkan
Harshil Kotecha

Ini sebagian besar untuk keperluan debugging. Anda dapat mendeskripsikan nama kelas, mendapatkan deskripsi contoh, dll. Tetapi itu tidak boleh digunakan untuk string yang digunakan dalam aplikasi itu sendiri.
Eric Aya

8

Untuk menghemat waktu dan kerumitan di masa depan, Anda dapat membuat ekstensi Int. Biasanya saya membuat file kode bersama tempat saya meletakkan ekstensi, enum, dan hal menyenangkan lainnya. Seperti apa kode ekstensi itu:

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

Kemudian ketika Anda ingin mengonversi int ke string, Anda bisa melakukan sesuatu seperti:

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

Pertanyaan yang berpotensi bodoh, tetapi haruskah ini suatu fungsi, atau variabel yang dihitung? Saya tidak dapat mengingat yang digunakan Swift mana dalam kasus ini - apakah itu toIntatau toInt().
Maury Markowitz

1
Untuk menghemat waktu dan kerepotan, gunakan saja myNumber.description. Tidak perlu ekstensi apa pun.
nyg

8

di swift 3.0 ini adalah bagaimana kita dapat mengonversi Intke Stringdan StringkeInt

//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
Pada baris terakhir kode, mengapa kita perlu tanda seru di akhir?
Omar Tariq

@OmarTariq, karena kami secara eksplisit memberi tahu kompiler bahwa integerValuejenisnya adalah Int. maka tidak dapat memiliki nilai nol untuk itu. jadi compiler memberitahu Anda untuk membuka bungkusnya. jika Anda ingin menghindari ini, gunakan seperti let integerValue = Int(stringValue). maka Anda tidak akan mendapatkan masalah. maaf atas keterlambatan balasan.
Chanaka Caldera

1
@OmarTariq Membuka gulungan dalam kasus ini bisa sangat buruk. Jika string bukan angka, ini akan merusak aplikasi Anda. Anda harus benar-benar memeriksa untuk memastikan yang valid dan tidak memaksa membuka bungkusan itu.
Charlie Fish

7

untuk alasan apa pun jawaban yang diterima tidak berhasil untuk saya. Saya pergi dengan pendekatan ini:

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

5

Berbagai cara untuk melakukan ini:

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

Saya menggunakan pendekatan sederhana ini

String ke Int:

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

dan dari Int ke String:

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

2

Ubah Unicode Int ke String

Bagi mereka yang ingin mengonversi Int ke string Unicode, Anda dapat melakukan hal berikut:

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

Atau sebagai alternatif:

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

@ jvarela, Ini masih bekerja. Saya hanya menguji ulang di Xcode 8.2 (Swift 3.0.2). The Stringinitializer dapat mengambil UnicodeScalar.
Suragch


0

Untuk mengubah String menjadi Int

var numberA = Int("10")

Print(numberA) // It will print 10

Untuk menyelubungi Int menjadi String

var numberA = 10

Jalan pertama)

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

2nd way)

var strSomeNumber = String(numberA)

atau

var strSomeNumber = "\(numberA)"


0

Di swift 3.0, Anda dapat mengubah integer ke string seperti yang diberikan di bawah ini

let a:String = String(stringInterpolationSegment: 15)

Cara lain adalah

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

// atau nomor bilangan apa pun di tempat 15


1
Dari referensi API "Jangan panggil inisialisasi ini secara langsung. Ini digunakan oleh kompiler ketika menafsirkan interpolasi string." Mungkin Anda ingin mengecek apakah Anda menggunakannya di suatu tempat.
Rahul Sharma

0

Saya lebih suka menggunakan Interpolasi String

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

Setiap objek memiliki representasi string. Ini membuat segalanya lebih sederhana. Misalnya jika Anda perlu membuat beberapa Stringdengan beberapa nilai. Anda juga dapat melakukan perhitungan matematika di dalamnya atau menggunakan beberapa kondisi

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

0

Jika Anda menyukai ekstensi cepat, Anda dapat menambahkan kode berikut

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

kemudian, Anda bisa mendapatkan string dengan metode yang baru saja Anda tambahkan

var x = 1234
var s = x.string


-1
let intAsString = 45.description     // "45"
let stringAsInt = Int("45")          // 45
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.