美文网首页
Swift 和 Objective-C 的几个易混淆点

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

作者: redexpress | 来源:发表于2018-04-02 10:48 被阅读11次

    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的移位是算术移位。

    相关文章

      网友评论

          本文标题:Swift 和 Objective-C 的几个易混淆点

          本文链接:https://www.haomeiwen.com/subject/dudthftx.html