如何使用Swift将NSString转换为整数?

时间:2014-10-30 20:16:12

标签: ios xcode swift nsstring

我需要在Swift中将NSString转换为整数:这是我正在使用的当前代码;它不起作用:

 var variable = (NSString(data:data, encoding:NSUTF8StringEncoding))
 exampeStruct.otherVariable = (variable).intValue

变量是普通的变量,而exampleStruct是代码中其他地方的结构,带有子变量otherVariable。

我希望将exampleStruct.otherVariable设置为int的{​​{1}}值,但我收到以下错误:

NSString

如何在Swift中将"Cannot convert the expression's type () to type Float" 转换为NSString

3 个答案:

答案 0 :(得分:1)

在我看来,问题可能不是Int转换,而是exampleStruct期待Float。

如果这不是问题(并且被授予,Swift的Xcode错误通常似乎更多的是关于行号而不是实际问题)那么这样的事情对你有用吗?

var ns:NSString = "1234"
if let i = (ns as String).toInt() {
    exampleStruct.otherVariable = i
}

答案 1 :(得分:1)

你必须在那里打开2个选项,注意我还将变量声明为String,在那里添加“:String”。例如:

if let variable:String = NSString(CString:"1", encoding: NSUTF8StringEncoding) {
    if let otherVariable = variable.toInt() {
        println(otherVariable) // "1"
    }
} 

在你的情况下,你应该这样做:

if let variable:String = NSString(data: data, encoding: NSUTF8StringEncoding) {
    if let exampeStruct.otherVariable = variable.toInt() {
        println(exampeStruct.otherVariable) // "1"
    }
}

答案 2 :(得分:1)

我知道你已经得到了答案,但我只想解释一下(我认为)可能不是一件容易的事

首先,我们要将NSData转换为NSString,因为没有人保证数据是有效的UTF8缓冲区,它返回一个可选的

 var variable = NSString(data:data, encoding:NSUTF8StringEncoding)

这意味着variable: NSString?

通常NSString被桥接到swift的String,但在这种情况下,我们使用NSString构造函数 - 您可以将其视为"没有直接导入swift的基础"类似语法(因为NSData没有桥梁)

我们仍然可以使用' Foundation'使用NSString

的方式
if let unwrappedVariable = variable {
    var number = unwrappedVariable.intValue
}

如果numberFloat,但字符串是整数的字符串表示

if let unwrappedVariable = variable {
    var number: Float = Float(unwrappedVariable.intValue)
}

如果number和字符串(表示)都是浮点数:

if let unwrappedVariable = variable {
    var number:Float = unwrappedVariable.floatValue
}

无论如何,使用Foundation有一个小问题。对于这些类型的转换,它没有可选值的概念(对于int,float)。如果无法将字符串解析为整数或浮点数,则返回0。这就是为什么使用swift native String更好的原因:

if let variable: String = NSString(data: data, encoding: NSUTF8StringEncoding) {
    if let integer = variable.toInt() {
        var integerNumber = integer
        var floatNumber = Float(integer)
    }
}