Строку NSNumber в Swift


Я нашел метод для преобразования строки в NSNumber, но код находится в objective-C. я попытался преобразовать его в swift, но он не работает.

код, который я использую

NSNumberFormatter *f = [[NSNumberFormatter alloc] init];
f.numberStyle = NSNumberFormatterDecimalStyle;
NSNumber *myNumber = [f numberFromString:@"42222222222"];

и в Swift я использую его таким образом

var i = NSNumberFormatter.numberFromString("42")

но этот код не работает, что я делаю не так?

спасибо заранее

6 52

6 ответов:

Swift 3.0

NSNumber(integer:myInteger) изменился на NSNumber(value:myInteger)

let someString = "42222222222"
if let myInteger = Int(someString) {
    let myNumber = NSNumber(value:myInteger)
}

Swift 2.0

использовать Int() инициализатор вроде этого.

let someString = "42222222222"
if let myInteger = Int(someString) {
    let myNumber = NSNumber(integer:myInteger)
    print(myNumber)
} else {
    print("'\(someString)' did not convert to an Int")
}

это можно сделать в одной строке, если вы уже знаете, что строка будет преобразована идеально или вам просто все равно.

let myNumber = Int("42222222222")!

Swift 1.0

использовать toInt() метод.

let someString = "42222222222"
if let myInteger = someString.toInt() {
    let myNumber = NSNumber(integer:myInteger)
    println(myNumber)
} else {
    println("'\(someString)' did not convert to an Int")
}

или сделать это в одну строку:

NSNumberFormatter().numberFromString("55")!.decimalValue

Swift 2

попробуйте это:

var num = NSNumber.init(int: Int32("22")!)

Swift 3.x

 NSNumber.init( value: Int32("22")!)

Вы можете использовать следующий код, если вы должны использовать NSNumberFormatter. Проще использовать метод везли.

let formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.DecimalStyle;
if let number = formatter.numberFromString("42") {
    println(number)
}

я использую расширение в Swift 3/4 и это круто.

extension String {
    var numberValue: NSNumber? {
        if let value = Int(self) {
            return NSNumber(value: value)
        }
        return nil
    }
}

а затем просто используйте следующий код:

stringVariable.numberValue

что круто, так это то, что вам не нужна цепочка if инструкции для разворачивания необязательных значений. Например,

if let _ = stringVariable, let intValue = Int(stringVariable!) {
    doSomething(NSNumber.init(value: intValue))
}

можно заменить на:

doSomething(stringVariable?.numberValue)

Попробовать Еще Раз

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