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

11

我需要在Swift中将一个NSString转换为整数:这是我目前正在使用的代码; 它无法正常工作:

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

变量是一个普通的变量,而exampleStruct是代码中另一个具有子变量otherVariable的结构体。

我希望它将exampleStruct.otherVariable设置为NSString的int值,但我收到以下错误:

"Cannot convert the expression's type () to type Float"

在 Swift 中,如何将 NSString 转换为 int


9
看一下文档怎么样?https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/#//apple_ref/occ/instp/NSString/intValue - Martin R
3个回答

1
我知道你已经得到了答案,但是我想解释一下可能不太简单的部分。
首先,我们有一些NSData需要转换为NSString,因为没有人保证数据是有效的UTF8缓冲区,它会返回一个可选项。
 var variable = NSString(data:data, encoding:NSUTF8StringEncoding)

这意味着什么:variable: NSString? 通常情况下,NSString会被桥接到Swift的String,但在这种情况下,我们使用了一个NSString构造函数——您可以将其视为一种“Foundation”式的语法,而该语法并未直接导入到Swift中(因为没有NSData的桥接)。
我们仍然可以使用NSString的“Foundation”方式。
if let unwrappedVariable = variable {
    var number = unwrappedVariable.intValue
}

如果number是一个Float,但字符串是整数的字符串表示形式。
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本地String的原因:

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

1

我觉得问题可能不是Int转换,而是exampleStruct需要一个Float。

但如果这不是问题(Swift的Xcode错误通常与行号有关,而不是实际问题),那么像这样的解决方法应该适用于您?

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

0

编辑/更新:

在使用Swift编程时,无需使用NSString。您可以使用Swift本地的String(data:)初始化器,然后将字符串转换为Int:

if let variable = String(data: data, encoding: .utf8),
    let integer = Int(variable) {
    exampeStruct.otherVariable = integer
}

如果其他变量是 Float 类型:

if let variable = String(data: data, encoding: .utf8),
    let integer = Float(variable) {
    exampeStruct.otherVariable = integer
}

在Swift 2中移除了toInt()函数。我们必须使用接受字符串的int构造函数 - Int(myString)。有关更多详细信息,请参阅此答案:http://stackoverflow.com/a/30739522/878414 - jay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接