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的移位是算术移位。
推荐阅读
- 急于表达——往往欲速则不达
- 第三节|第三节 快乐和幸福(12)
- EffectiveObjective-C2.0|EffectiveObjective-C2.0 笔记 - 第二部分
- 20170612时间和注意力开销记录
- 2.6|2.6 Photoshop操作步骤的撤消和重做 [Ps教程]
- 对称加密和非对称加密的区别
- 眼光要放高远
- 樱花雨
- 前任
- 2020-04-07vue中Axios的封装和API接口的管理