从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()
在调用中,可以将变量声明为可选:
someNumb:Int?=stringNumber.toInt()
。然后类型安全系统将意识到
foo
可能不存在。放
当然会崩溃。忘记将
添加为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
,则应使用