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")
找到了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")