Swift 中的字符串到 NSNumber

String to NSNumber in Swift

找到了String转NSNumber的方法,不过代码在Objective-C。我试过将它转换为 Swift 但它不起作用。

我使用的代码:

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

在Swift中我是这样使用的:

var i = NSNumberFormatter.numberFromString("42")

但是这段代码不起作用。我做错了什么?

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可以用下面的代码。 使用Wezly的方法更简单

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

或者只写一行:

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

Swift 2

试试这个:

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

Swift 3.x

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

Try Once

let myString = "123"
let myInt = NSNumber(value: Int(myString) ?? 0)

我确实在 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)

最近 Swift:

let number = NumberFormatter().number(from: "1234")

("23" 作为 NSString).integerValue ("23.5" 作为 NSString).doubleValue

等等。

Swift 5

let myInt = NumberFormatter().number(from: "42")