在Swift 2.1中,下面的代码片段会生成一个错误。
编译器错误提示:
二元运算符“==”不能应用于类型为“String”和“_Element?”的操作数。
因此,在这种情况下,推荐使用常量而不是文字。 (我正在学习Swift,如果有更好的方式处理此类比较检查,请随意提及。)
谢谢!
var str = "Hello, playground!"
// Success Case
if "!" == str.characters.last {
print("Tone it down please")
}
// Fail Case
let bang = "!"
if bang == str.characters.last { // this line won't compile
print("Tone it down please")
}
编译器错误提示:
二元运算符“==”不能应用于类型为“String”和“_Element?”的操作数。
因此,在这种情况下,推荐使用常量而不是文字。 (我正在学习Swift,如果有更好的方式处理此类比较检查,请随意提及。)
谢谢!
==
运算符比较单字符字符串和字符时,Swift自动将"!"
作为一个Character
别名,所以你的“成功案例”可能是因为这个机制起作用了;而这种机制对于bang
则不适用,因为它不是一个字面量。但这只是一个猜测,所以我没有在我的答案中包含它。 - Eric Ayalet bang = Character("!")
使“失败案例”编译通过。- 因此,这个问题实际上与可选项无关。let bang =“!”; if bang == str.characters.last! { }
也不会编译。 - Martin Rlet bang =“!”.characters.last
- jbbenni