我需要在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
?
答案 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
}
如果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 native String
更好的原因:
if let variable: String = NSString(data: data, encoding: NSUTF8StringEncoding) {
if let integer = variable.toInt() {
var integerNumber = integer
var floatNumber = Float(integer)
}
}