从swift中的字符串获取整数值
所以我可以这样做:从swift中的字符串获取整数值,swift,swift2,Swift,Swift2,所以我可以这样做: var stringNumb: NSString = "1357" var someNumb: CInt = stringNumb.intValue 但是我找不到用String做这件事的方法。我想做一些类似的事情: var stringNumb: String = "1357" var someNumb: Int = Int(stringNumb) 这也不起作用: var someNumbAlt: Int = myString.integerValue 您可以将字符
var stringNumb: NSString = "1357"
var someNumb: CInt = stringNumb.intValue
但是我找不到用String
做这件事的方法。我想做一些类似的事情:
var stringNumb: String = "1357"
var someNumb: Int = Int(stringNumb)
这也不起作用:
var someNumbAlt: Int = myString.integerValue
您可以将字符串桥接到NSString,并将CInt转换为Int,如下所示:
var myint: Int = Int(stringNumb.bridgeToObjectiveC().intValue)
我会使用:
var stringNumber = "1234"
var numberFromString = stringNumber.toInt()
println(numberFromString)
注意toInt()
:
如果字符串表示适合整数的整数,则返回相应的整数
如果您只能使用
NSString
它与objective-c非常相似。所有数据类型都存在,但需要添加as NSString
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
此外,我们还添加了一个toInt()
函数,请参见苹果公司的《Swift编程语言》。第49页
您想要的方法是
toInt()
——您必须小心一点,因为toInt()
返回一个可选的Int
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
一个更普遍的解决方案可以是一个扩展
extension String {
var toFloat:Float {
return Float(self.bridgeToObjectiveC().floatValue)
}
var toDouble:Double {
....
}
....
}
例如,这个例子通过toFloat扩展了swift原生字符串对象,我为此编写了一个扩展。它总是返回一个
Int
。如果字符串不适合Int
,则返回0
extension String {
func toTypeSafeInt() -> Int {
if let safeInt = self.toInt() {
return safeInt
} else {
return 0
}
}
}
Swift 2.0您可以使用构造函数初始化整数
var stringNumber = "1234"
var numberFromString = Int(stringNumber)
在Swift 2.0中将字符串转换为整数:
var str:NSString = Data as! NSString
var cont:Int = str.integerValue
对Int32使用.intervalue或intValue
8:1赔率(*)
或
Int(String)
返回可选的Int?
,而不是Int
安全使用:不要显式打开
let unwrapped:Int = Int(stringNumb) ?? 0
或
(*)没有一个答案真正解决了为什么
var someNumb:Int=Int(stringNumb)
不起作用。简单但肮脏的方式
// 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)
let stringNumb = "1357"
let someNumb = Int(stringNumb) // 1357 as integer
扩展方式
// 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)
let stringNumb = "1357"
let someNumb = Int(stringNumb) // 1357 as integer
这真的更好,因为它可以很好地处理区域设置和小数
extension String {
var numberValue:NSNumber? {
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
return formatter.numberFromString(self)
}
}
现在,您只需执行以下操作:
let someFloat = "42.42".numberValue
let someInt = "42".numberValue
上面的答案对我没有帮助,因为我的字符串值是“700.00” 使用Swift 2.2这适合我
let myString = "700.00"
let myInt = (myString as NSString).integerValue
我将myInt传递给NSFormatterClass
let formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.maximumFractionDigits = 0
let priceValue = formatter.stringFromNumber(myInt!)!
//Now priceValue is ₹ 700
感谢您在Swift 3.0中的博客帖子。 类型1:将NSString转换为String
let stringNumb:NSString = "1357"
let someNumb = Int(stringNumb as String) // 1357 as integer
类型2:如果字符串只有整数
// 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)
let stringNumb = "1357"
let someNumb = Int(stringNumb) // 1357 as integer
类型3:如果字符串具有浮点值
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"
}
这是有效的,尽管如果显式声明var,则需要添加感叹号:
var someNumb:Int=stringNumber.toInt()正如@NateCook指出的,我并没有明确声明它。编译器知道numberFromString应该是int,因为它被初始化为一…我知道你不是,但我是。我必须做出调整才能这样做。您的代码是正确的,只是将其添加为注释。是的,只有当值符合注释中指出的Int时,它才会返回值。否则它将返回nil…而不是放入
在调用中,可以将变量声明为可选:someNumb:Int?=stringNumber.toInt()
。然后类型安全系统将意识到foo
可能不存在。放如果字符串无法转换为数字,code>当然会崩溃。忘记将添加为NSString
。修复了它@gwcofei不想使用NSString,请参见问题。但类似地,toInt()
是正确的方法。optionals是语言的核心部分当然,您只需要知道您使用的是可选的,而不是直接的Int。这可以更简洁地写成return self.toInt()??0
。最好是以内联方式编写,而不是为此使用扩展方法。从Swift 2.0开始,您不再将toInt()
方法作为String
的一部分。因此,这个Int
构造函数现在是将字符串转换为Int的唯一方法。不需要分号。如果用户在文本中输入的数字超过Int64限制数字,请告诉我们如何处理field@Sebastian这不令人沮丧吗?:)<代码>变量someNumb:Int?=Int(stringNumb)
或var someNumb=Int(stringNumb)
谢谢@user3441734。我不应该使用强制转换。这个问题是关于从字符串中获取整数。在你的例子中,你没有Int,你有Double。在Swift中,使用Double()
的方法与使用Int()
的方法相同。无需使用到NSString的桥接。Hey@EricD感谢您的建议,但“我只需要整数,因为我正在将Int传递给货币转换器的NSNumberFormatter类”。在这种情况下,您可以使用Double()
然后使用Int()
。像这样:如果让d=Double(“700.00”){let i=Int(d);print(i)}
:)那么“Type 3”的代码并不理想。而不是检查stringToFloat
是!=nil
,如果let
,则应使用。