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 is ₹ 700

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.