Dapatkan nilai integer dari string dengan cepat

134

Jadi saya bisa melakukan ini:

var stringNumb: NSString = "1357"

var someNumb: CInt = stringNumb.intValue

Tapi saya tidak dapat menemukan cara untuk melakukannya dengan String. Saya ingin melakukan sesuatu seperti:

var stringNumb: String = "1357"

var someNumb: Int = Int(stringNumb)

Ini juga tidak bekerja:

var someNumbAlt: Int = myString.integerValue
Logan
sumber
1
var someNumb: Int? = Int(stringNumb)atauvar someNumb = Int(stringNumb)
SwiftArchitect

Jawaban:

179

Swift 2.0 Anda dapat menginisialisasi Integer menggunakan konstruktor

var stringNumber = "1234"
var numberFromString = Int(stringNumber)
Buru
sumber
14
Pada Swift 2.0 Anda tidak lagi memiliki toInt()metode sebagai bagian dari String. Jadi Intkonstruktor ini sekarang satu-satunya cara untuk mengubah string menjadi int.
Morgan Wilde
1
Titik koma tidak perlu
Sebastian
Bisakah Anda memberi tahu cara menangani jika pengguna memasukkan nomor lebih dari nomor batas Int64 di bidang teks
Khushboo Dhote
1
@ Sebastian bukankah itu membuat frustrasi? :)
Victor
94

Saya akan menggunakan:

var stringNumber = "1234"
var numberFromString = stringNumber.toInt()
println(numberFromString)

Catatan toInt():

Jika string mewakili integer yang cocok dengan Int, mengembalikan integer yang sesuai.

CW0007007
sumber
5
Ini berhasil, walaupun jika Anda mendeklarasikan var secara eksplisit, Anda perlu menambahkan tanda seru: var someNumb: Int = stringNumber.toInt()!seperti yang ditunjukkan oleh NateCook
Logan
Saya tidak mendeklarasikannya secara eksplisit. Kompiler tahu bahwa numberFromString harus berupa int karena itu diinisialisasi sebagai satu ...
CW0007007
Saya tahu Anda tidak, tetapi saya tahu. Saya harus melakukan penyesuaian untuk melakukannya. Kode Anda benar, hanya menambahkannya sebagai komentar.
Logan
Ya itu hanya mengembalikan nilai jika nilainya cocok dengan Int seperti catatan tersebut tunjukkan. Jika tidak mengembalikan nihil ...
CW0007007
5
Alih-alih menempatkan !pada panggilan, Anda dapat mendeklarasikan variabel Anda sebagai opsional: someNumb: Int? = stringNumber.toInt(). Maka sistem jenis keamanan akan menyadari bahwa foomungkin tidak ada. Puting !tentu saja akan macet jika string Anda tidak dapat dikonversi ke nomor.
gwcoffey
18

Di Swift 3.0

Tipe 1: Konversi NSString ke String

    let stringNumb:NSString = "1357"
    let someNumb = Int(stringNumb as String) // 1357 as integer

Tipe 2: Jika String hanya memiliki Integer

    let stringNumb = "1357"
    let someNumb = Int(stringNumb) // 1357 as integer

Tipe 3: Jika String memiliki nilai Float

    let stringNumb = "13.57"
    if let stringToFloat = Float(stringNumb){
        let someNumb = Int(stringToFloat)// 13 as Integer
    }else{
       //do something if the stringNumb not have digit only. (i.e.,) let stringNumb = "13er4"
    }
Rajamohan S
sumber
Kode untuk "Tipe 3" tidak ideal. Alih-alih memeriksa dari stringToFloatyaitu != nil, Anda harus menggunakan if let.
rmaddy
11

Metode yang Anda inginkan adalah toInt()- Anda harus sedikit berhati-hati, karena toInt()mengembalikan Int opsional.

let stringNumber = "1234"
let numberFromString = stringNumber.toInt()
// numberFromString is of type Int? with value 1234

let notANumber = "Uh oh"
let wontBeANumber = notANumber.toInt()
// wontBeANumber is of type Int? with value nil
Nate Cook
sumber
tetapi demikian pula, toInt()adalah Jalan yang Benar untuk melakukannya. opsional adalah bagian inti dari bahasa
Jiaaro
Tentu saja, Anda hanya perlu menyadari bahwa Anda bekerja dengan opsional, bukan Int lurus.
Nate Cook
5

Jika Anda dapat menggunakan NSStringhanya.

Ini sangat mirip dengan objektif-c. Semua tipe data ada tetapi membutuhkan as NSStringpenambahan

    var x = "400.0" as NSString 

    x.floatValue //string to float
    x.doubleValue // to double
    x.boolValue // to bool
    x.integerValue // to integer
    x.intValue // to int

Kami juga memiliki toInt()fungsi yang ditambahkan Lihat Apple Inc. “Bahasa Pemrograman Swift.” iBooks. https://itun.es/us/jEUH0.l halaman 49

x.toInt()
John Riselvato
sumber
lupa menambahkan as NSString. memperbaikinya @ gwcoffey
John Riselvato
2
Saya tidak ingin menggunakan NSString, lihat pertanyaan.
Logan
4

jawaban di atas tidak membantu saya karena nilai string saya adalah "700,00"

dengan Swift 2.2 ini bekerja untuk saya

let myString = "700.00"
let myInt = (myString as NSString).integerValue

Saya meneruskan myInt ke NSFormatterClass

let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0

let priceValue = formatter.stringFromNumber(myInt!)!

//Now priceValue is700

Terima kasih untuk posting blog ini .

swiftBoy
sumber
1
Pertanyaan ini adalah tentang mendapatkan bilangan bulat dari sebuah String. Dalam kasus Anda, Anda tidak memiliki Int, Anda memiliki Double. Di Swift, cukup gunakan Double()cara yang sama kita gunakan Int(). Tidak perlu menggunakan bridging ke NSString.
Eric Aya
Hei @EricD terima kasih atas saran Anda, tetapi " Saya ingin Integer hanya karena saya meneruskan Int ke NSNumberFormatter class for currency converteror".
swiftBoy
1
Nah dalam hal ini Anda bisa menggunakan Double() lalu menggunakan Int(). Seperti ini: if let d = Double("700.00") { let i = Int(d); print (i) }:)
Eric Aya
2

Anda dapat menjembatani dari String ke NSString dan mengonversi dari CInt ke Int seperti ini:

var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)
Connor
sumber
1

Saya menulis ekstensi untuk tujuan itu. Itu selalu mengembalikan sebuah Int. Jika string tidak cocok dengan Int, 0 dikembalikan.

extension String {
    func toTypeSafeInt() -> Int {
        if let safeInt = self.toInt() {
            return safeInt
        } else {
            return 0
        }
    }
}
timo-haas
sumber
2
Ini dapat ditulis lebih ringkas sebagai return self.toInt() ?? 0. Mungkin lebih baik hanya menulis seperti itu sebaris daripada memiliki metode ekstensi untuk ini.
jlong64
0

Solusi yang lebih umum bisa berupa perpanjangan

extension String {
    var toFloat:Float {
        return Float(self.bridgeToObjectiveC().floatValue)
    }
    var toDouble:Double {
        ....
    }
    ....
}

ini misalnya memperluas objek String asli dengan toFloat

loopmasta
sumber
0

Konversi String ke Int di Swift 2.0:

var str:NSString = Data as! NSString
var cont:Int = str.integerValue

menggunakan .intergerValue or intValue for Int32

Pablo Ruan
sumber
0

8: 1 Peluang (*)

var stringNumb: String = "1357"
var someNumb = Int(stringNumb)

atau

var stringNumb: String = "1357"
var someNumb:Int? = Int(stringNumb)

Int(String)mengembalikan opsional Int?, bukan Int.


Penggunaan yang aman: jangan secara terbuka membuka

let unwrapped:Int = Int(stringNumb) ?? 0

atau

if let stringNumb:Int = stringNumb { ... }

(*) Tidak ada jawaban yang menjawab mengapa var someNumb: Int = Int(stringNumb)tidak bekerja.

Arsitektur Swift
sumber
Terima kasih @ user3441734. Saya seharusnya tidak menggunakan casting .
SwiftArchitect
0

Cara sederhana tapi kotor

// Swift 1.2
if let intValue = "42".toInt() {
    let number1 = NSNumber(integer:intValue)
}
// Swift 2.0
let number2 = Int(stringNumber)

// Using NSNumber
let number3 = NSNumber(float:("42.42" as NSString).floatValue)

Cara ekstensi

Ini lebih baik, sungguh, karena itu akan bermain bagus dengan lokal dan desimal.

extension String {

    var numberValue:NSNumber? {
        let formatter = NSNumberFormatter()
        formatter.numberStyle = .DecimalStyle
        return formatter.numberFromString(self)
    }
}

Sekarang Anda bisa melakukannya:

let someFloat = "42.42".numberValue
let someInt = "42".numberValue
Kevin R
sumber