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
}
易混淆点三:移位运算
C语言的移位是逻辑移位还是算术移位和编译器实现相关,Swift的移位是算术移位。