Swift'den tamsayı değeri alın


135

Böylece bunu yapabilirim:

var stringNumb: NSString = "1357"

var someNumb: CInt = stringNumb.intValue

Ama bunu w / a yapmanın bir yolunu bulamıyorum String. Şunun gibi bir şey yapmak istiyorum:

var stringNumb: String = "1357"

var someNumb: Int = Int(stringNumb)

Bu da çalışmıyor:

var someNumbAlt: Int = myString.integerValue

1
var someNumb: Int? = Int(stringNumb)veyavar someNumb = Int(stringNumb)
SwiftArchitect

Yanıtlar:


179

Swift 2.0 yapıcı kullanarak Tamsayı başlatabilirsiniz

var stringNumber = "1234"
var numberFromString = Int(stringNumber)

14
Swift 2.0'dan itibaren artık toInt()yöntemin bir parçası değilsiniz String. Yani bu Intkurucu artık dizeleri inçlere dönüştürmenin tek yoludur.
Morgan Wilde

1
Noktalı virgül gerekli değildir
Sebastian

Kullanıcının metin alanına bir Int64 limit sayısından daha fazla sayı
girmesi

1
@Sebastian o kadar sinir bozucu değil mi? :)
Victor

94

Kullanırım:

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

Not toInt():

Dize, bir Int'ye uyan bir tamsayıyı temsil ediyorsa, karşılık gelen tamsayıyı döndürür.


5
Bu işe yaradı, ancak değişkeni açıkça var someNumb: Int = stringNumber.toInt()!belirtirseniz, bir ünlem işareti eklemeniz gerekir: @NateCook'un belirttiği gibi
Logan

Açıkça beyan etmiyorum. Derleyici numberFromString'in int olması gerektiğini bilir çünkü tek olarak başlatılmıştır ...
CW0007007

Değilsin biliyorum ama ben öyleyim. Bunu yapmak için bu ayarlamayı yapmam gerekiyordu. Kodunuz doğru, sadece yorum olarak ekledik.
Logan

Evet, yalnızca notun işaret ettiği gibi değer bir Int'e uyuyorsa bir değer döndürür. Aksi takdirde sıfır döndürür ...
CW0007007

5
Yerine koyma !çağrısı üzerine, isteğe bağlı olarak değişken bildirebilirsiniz: someNumb: Int? = stringNumber.toInt(). Daha sonra tip güvenlik sistemi bunun var fooolmayabileceğinin farkında olacaktır . Diziniz !bir sayıya dönüşemezse , koymak elbette çökecektir.
gwcoffey

18

Swift 3.0'da

Tür 1: NSString'i Dizeye Dönüştür

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

Tür 2: Dizede yalnızca Tamsayı varsa

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

Tip 3: Dize Float değerine sahipse

    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"
    }

"Tip 3" kodu ideal değildir. Yerine kontrol etme stringToFloatIS != nil, kullanmak gerekir if let.
rmaddy

11

İstediğiniz yöntem toInt()- biraz dikkatli olmanız gerekir, çünkü toInt()isteğe bağlı bir Int döndürür.

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

ama benzer şekilde, toInt()bunu yapmanın Doğru Yolu. seçenekler dilin temel bir parçasıdır
Jiaaro

Tabii ki, sadece isteğe bağlı bir Int ile çalıştığınızın farkında olmalısınız.
Nate Cook

5

Bir NSStringonly kullanabiliyorsanız .

Amaç-c'ye oldukça benzer. Tüm veri türleri orada ancak as NSStringeklenmesi gerekiyor

    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

Ayrıca bir toInt()işlev ekledik. Bkz. Apple Inc. "The Swift Programlama Dili." iBooks. https://itun.es/us/jEUH0.l sayfa 49

x.toInt()

eklemeyi unuttum as NSString. düzeltildi @gwcoffey
John Riselvato

2
NSString kullanmak istemiyorum, soruya bakın.
Logan

4

Dize değerim "700.00" olduğundan yukarıdaki yanıt bana yardımcı olmadı

ile Swift 2.2 Bu benim için çalışıyor

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

MyInt'i NSFormatterClass'a geçirdim

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

let priceValue = formatter.stringFromNumber(myInt!)!

//Now priceValue is700

Bu blog yazısı için teşekkürler .


1
Bu soru, bir String'den bir tamsayı almakla ilgilidir . Sizin durumunuzda, bir Int'niz yok, bir Double'niz var. Swift'de, kullandığımız Double()yöntemi kullanın Int(). NSString'e köprüleme kullanmaya gerek yok.
Eric Aya

Hey @EricD, öneriniz için teşekkürler, ancak "Integer'ı yalnızca para birimi dönüştürücü için NSNumberFormatter sınıfına Int'yi geçerken istedim ".
swiftBoy

1
Peki bu durumda kullanabilirsiniz Double() sonra kullanabilirsiniz Int(). if let d = Double("700.00") { let i = Int(d); print (i) }
Eric Aya

2

String'den NSString'e köprü oluşturabilir ve CInt'den Int'e şu şekilde dönüştürebilirsiniz:

var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)

1

Bu amaçla bir uzantı yazdım. Her zaman bir Int. Dize bir uymuyorsa Int, 0 döndürülür.

extension String {
    func toTypeSafeInt() -> Int {
        if let safeInt = self.toInt() {
            return safeInt
        } else {
            return 0
        }
    }
}

2
Bu daha kısa ve öz olarak yazılabilir return self.toInt() ?? 0. Bunun için bir uzatma yöntemine sahip olmaktansa, onu satır içi olarak yazmak muhtemelen daha iyidir.
jlong64

0

Daha genel bir çözüm bir uzantı olabilir

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

bu örneğin, hızlı yerel String nesnesini toFloat ile genişletir


0

Swift 2.0'da String'i Int'e Dönüştür:

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

kullanım .intergerValue or intValue for Int32


0

8: 1 Oran (*)

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

veya

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

Int(String)isteğe bağlı bir döndürür Int?, bir değil Int.


Güvenli kullanım: açıkça sarmayın

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

veya

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

(*) Cevapların hiçbiri aslında neden var someNumb: Int = Int(stringNumb)işe yaramadığına değinmedi.


@ User3441734 teşekkür ederiz. Kendimi kullanılmış olmamalıdır döküm .
SwiftArchitect

0

Basit ama kirli yol

// 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)

Uzatma yolu

Bu daha iyi, çünkü yerel ve ondalık sayılarla güzelce oynayacak.

extension String {

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

Artık şunları yapabilirsiniz:

let someFloat = "42.42".numberValue
let someInt = "42".numberValue
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.