玩swift我发现这令人惊讶:
"123".integerValue // <= returns 123
var x = "123"
x.integerValue // <= Error: String does not have a member named integerValue
有人可以解释一下吗?
答案 0 :(得分:6)
我的猜测是,在第一个例子中,编译器使用对integerValue
的调用作为推断类型的附加信息(在NSString和Swift String之间进行选择)。
在第二个例子中,它可能默认为Swift String,因为它不会评估多行。
答案 1 :(得分:1)
我相信这是行动中类型推断的一个例子。执行:"123".integerValue
时,编译器会检测到在这种情况下您要使用NSString
(当您使用字符串文字作为objective-c函数的参数时也会这样做。
类似的例子是:
// x is an Int
let x = 12
// here we tell the compiler that y is a Double explicitly
let y: Double = 12
// z is a Double because 2.5 is a literal Double and so "12" is also
// parsed as a literal Double
let z = 12 * 2.5
答案 2 :(得分:1)
使用.toInt()
var x = "123"
var num: Int = x.toInt()
答案 3 :(得分:0)
如果你这样做:
var x = "123" as NSString
x.integerValue
var x : NSString = "123" // or this as Sulthan suggests
它不会显示错误。
我认为你的第一个例子是自动提示你想要使用NSString,因为NSString只有这个.integerValue调用。
第二个例子可能是失败的,因为它没有被告知它是什么,而是决定使用swift字符串。