在使用Swift时,我发现了这个令人惊讶的事情:
"123".integerValue // <= returns 123
var x = "123"
x.integerValue // <= Error: String does not have a member named integerValue
有人能解释一下吗?
我的猜测是在第一个例子中,编译器使用对 integerValue
的调用作为额外的信息来推断类型(在NSString和Swift String之间进行选择)。
在第二个例子中,它可能默认为Swift String,因为它不评估多行。
var x:NSString = "123"
指定类型以解决该问题。 - Austin"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
.toInt()
。var x = "123"
var num: Int = x.toInt()
如果你这样做:
var x = "123" as NSString
x.integerValue
var x : NSString = "123" // or this as Sulthan suggests
它不会显示那个错误。
我认为你的第一个例子自动选择使用NSString,因为只有这个.integerValue调用。
第二个例子可能失败是因为它没有被告知它是什么类型,所以决定使用Swift字符串。
var x: NSString = "123"
也许会更好。 - Sulthan
var x = "123"; (x as NSString).integerValue // <= 返回 123
- Malcolm Jarvisx.bridgeToObjectiveC().integerValue
- Brian Nickel