swift5(2)运算符

2020-02-25  本文已影响0人  C_G__

感谢作者
https://www.jianshu.com/p/66a6012d577d

        // 运算符
        let x = 1;
        let (y, z) = (1, 2);
        1 + 2       // equals 3
        5 - 3       // equals 2
        2 * 3       // equals 6
        10.0 / 2.5  // equals 4.0
        "hello, " + "world"  // equals "hello, world"
        9 % 4    // equals 1
        -9 % 4   // equals -1
        let three = 3;
        let minusThree = -three;       // minusThree equals -3
        let plusThree = -minusThree;   // plusThree equals 3, or "minus minus three"
        let minusSix = -6;
        let alsoMinusSix = +minusSix;  // alsoMinusSix equals -6
        var d = 1;
        d += 2; // a is now equal to 3
        
        1 == 1   // true because 1 is equal to 1
        2 != 1   // true because 2 is not equal to 1
        2 > 1    // true because 2 is greater than 1
        1 < 2    // true because 1 is less than 2
        1 >= 1   // true because 1 is greater than or equal to 1
        2 <= 1   // false because 2 is not less than or equal to 1
        
        let name = "world"
        if name == "world" {
            print("hello, world")
        } else {
            print("I'm sorry \(name), but I don't recognize you")
        }
        // Prints "hello, world", because name is indeed equal to "world".
        
        // 元组比较
        // 只限于元组元素少于7个元素
        // 只能用于可比较元素,元素存在布尔值时不能比较
        // 编译错误
//        if ("blue", false) < ("purple", true) {//!< 编译器直接会报错
//            print("Binary operator '<' cannot be applied to two '(String, Bool)' operands")
//        }
        // 对应下标的元素逐个比较
        // 第一个元素不相同,则按第一个比较返回结果
        // 如果第一个相同,则比较第二个元素,以此类推。
        (1, "zebra") < (2, "apple")  // true,第一个已返回布尔值
        (3, "apple") < (3, "bird")    // true,第一个相同,比较第二个
        (4, "dog") == (4, "dog")      // true,都相同
        
        // 身份运算符
        // ===:
        // !==:
        let obj1 = NSView.init();
        let obj2 = NSView.init();
        let obj3 = obj2;
        let (o1, o2, o3) = (obj1, obj2, obj3);
        if o1 === o2 {
            print("同一个对象");
        } else{
            print("不同对象"); // 结果
        }
        if o3 === o2 {
            print("同一个对象"); // 结果
        } else{
            print("不同对象");
        }
        
        // 可Nil合并(Nil-Coalescing)运算符 ??
        // 解包可选a;如果a为nil,则返回默认值b,否则返回a。
        // 表达式中a始终是可选类型。并且b必须与a的类型匹配。
        let nila = a ?? b;
        
        // 封闭范围运算符(Close Range Operator)
        // ...
        for item in 1...8 {
            print(item); //!< 打印 12345678
        }
        // 半开范围运算符(Half-Open Range Operator)
        // ..<
        let array = ["i","am","zhangfei"];
        for index in 0 ..< array.count { //!< 遍历数组
            print("索引:\(index),对应字符串:\(array[index])")
        }
        // 直接输出字符串,形式
        for str in array[0 ..< array.count] {
            print(str);
        }
        print("*************");
        // 局部(单面/侧)范围(One-Sided Ranges)
        // 直接输出字符串 形式1
        for str in array[...] {
            print(str);
        }
        print("*************");
        // 直接输出字符串 形式2
        // 此处`1`:0 < `1` < array.count-1
        for str in array[1...] {
            print(str);
        }
        print("*************");
        // 运行时崩溃,数组下标越界
//        for str in array[-1...] {
//            print(str);
//        }
//        print("*************");
        // 直接输出字符串 形式3
        // 此处`(array.count-1)`:0 < `(array.count-1)` < array.count-1
        for str in array[...(array.count-1)] {
            print(str);
        }
        print("*************");
        // 运行时崩溃,数组下标越界
//        for str in array[...8] {
//            print(str);
//        }
//        print("*************");
        
        let range = ...5;
        range.contains(7);   // false
        range.contains(4);   // true
        range.contains(-1);  // true
        
//        let range2 =  0...;
//        for i in range2 {//!< 代码无限期的执行
//            print(i);
//        }

上一篇下一篇

猜你喜欢

热点阅读