swift中的文字字符串与`String`
Posted
技术标签:
【中文标题】swift中的文字字符串与`String`【英文标题】:Literal String vs. `String` in swift 【发布时间】:2014-06-03 15:46:41 【问题描述】:玩 swift 我发现这令人惊讶:
"123".integerValue // <= returns 123
var x = "123"
x.integerValue // <= Error: String does not have a member named integerValue
谁能解释一下?
【问题讨论】:
看起来 "123".integerValue 将其桥接到 NSString。var x = "123"; (x as NSString).integerValue // <= returns 123
@MalcolmJarvis 或者更详细的:x.bridgeToObjectiveC().integerValue
【参考方案1】:
我的猜测是,在第一个示例中,编译器使用对 integerValue
的调用作为附加信息来推断类型(在 NSString 和 Swift String 之间进行选择)。
在第二个示例中,它可能默认为 Swift 字符串,因为它不会计算多行。
【讨论】:
要添加到此,您可以显式键入变量var x:NSString = "123"
来解决问题
我得出了同样的结论。没有意识到方法调用之类的东西会影响推理,但这是有道理的。谢谢!【参考方案2】:
我相信这是类型推断的一个例子。当您这样做时:"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
【讨论】:
【参考方案3】:使用.toInt()
var x = "123"
var num: Int = x.toInt()
【讨论】:
是的,我知道。我只是对我看到的结果感到惊讶。【参考方案4】:如果你这样做:
var x = "123" as NSString
x.integerValue
var x : NSString = "123" // or this as Sulthan suggests
它不会显示该错误。
我认为您的第一个示例自动表明您想使用 NSString,因为 NSString 只有这个 .integerValue 调用。
第二个例子可能失败了,因为它没有被告知它是什么,而是决定使用 swift 字符串。
【讨论】:
var x : NSString = "123"
可能会更好以上是关于swift中的文字字符串与`String`的主要内容,如果未能解决你的问题,请参考以下文章