文字字符串与swift中的`String`

时间:2014-06-03 15:46:41

标签: swift

玩swift我发现这令人惊讶:

"123".integerValue // <= returns 123

var x = "123"
x.integerValue     // <= Error: String does not have a member named integerValue

有人可以解释一下吗?

4 个答案:

答案 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字符串。