Swift|Swift 和 Objective-C 的几个易混淆点

Swift和Objective-C语法并不太相似,但是有些从C继承的东西是类似的,比如块注释、switch语句等,但是看起来一样的地方,也有些细微的不同,如果依照C的思路就容易出错,下面列举几点:

因为Objective-C是C的扩展,对于C支持的特性,本文以C语言举例。
易混淆点一:块注释 C语言的块注释是不能嵌套的,Swift的块注释可以嵌套。
// C 代码 /* C语言最初只支持块注释 /* */,后来C99标准增加了行注释 // */ int main() { return 0; }

上面的代码是编译不过的,因为注释到了逗号前就结束了。
Swift注释支持嵌套,下面的代码是正确的
// Swift 代码 /* Swift语言支持块注释 /* */ 和行注释 // */ print("Hello, World!")

易混淆点二:switch语句 C的case语句是下坠的,Swift不下坠,Swift的case支持多值。
判断元音的函数
// C 代码 bool isVowelLetter(char ch) { bool result = false; switch (toupper(ch)) { case 'A': case 'E': case 'I': case 'O': case 'U': result = true; break; default: result = no; } return result; }

Swift 需要下坠需要使用fallthrough关键字,上面逻辑Swift的等效代码为:
func isVowelLetter(char ch: Character) -> Bool { var result: Bool switch String(ch).uppercased() { case "A": fallthrough case "E": fallthrough case "I": fallthrough case "O": fallthrough case "U": print("\(ch)是元音字母") result = true // break这里不需要break default: print("\(ch)不是元音字母") result = false } return result }

不过Swift的case语句可以支持多个值,上面代码可简化为:
func isVowelLetter(char ch: Character) -> Bool { var result: Bool switch String(ch).uppercased() { case "A", "E", "I", "O", "U": print("\(ch)是元音字母") result = true default: print("\(ch)不是元音字母") result = false } return result }

易混淆点三:移位运算 【Swift|Swift 和 Objective-C 的几个易混淆点】C语言的移位是逻辑移位还是算术移位和编译器实现相关,Swift的移位是算术移位。

    推荐阅读