iOS开发程序员程序员首页投稿

巩固—Swift 5.0 基础知识(三)

2017-10-12  本文已影响0人  永断阎罗

下标

继承

初始化

自动引用计数器

可选链

错误处理

类型转换

扩展

协议

泛型

高级运算符

        struct Vector2D {
            var x = 0.0, y = 0.0
        }
        
        extension Vector2D {
            static func + (left: Vector2D, right: Vector2D) -> Vector2D {
                return Vector2D(x: left.x + right.x, y: left.y + right.y)
            }
        }
* 前缀(`prefix`)和后缀(`postfix`)运算符

        extension Vector2D {
            static prefix func - (vector: Vector2D) -> Vector2D {
                return Vector2D(x: -vector.x, y: -vector.y)
            }
        }
* 复合赋值运算符

        extension Vector2D {
            static func += (left: inout Vector2D, right: Vector2D) {
                left = left + right
            }
        }
* 注意:不能对默认的赋值运算符(=)进行重载。只有组合赋值运算符可以被重载。同样地,也无法对三目条件运算符`(a ? b : c)`进行重载。
* 等价运算符:“相等”运算符(==)与“不等”运算符(!=)

        extension Vector2D {
            static func == (left: Vector2D, right: Vector2D) -> Bool {
                return (left.x == right.x) && (left.y == right.y)
            }
            static func != (left: Vector2D, right: Vector2D) -> Bool {
                return !(left == right)
            }
        }
* 自定义运算符:系统的运算符的特点:1.有优先级  2.结合性(左结合,右结合) 3.运算符的位置(前面,后面,中间)在自定义运算的时候必须确定的元素
    * infix(运算符在被操作的数据的中间)(多目)
    * prefix(放在数据的前面)--> (单目)
    * postfix(放在数据的后面)--> (单目)
    * associativity left  左结合 ; associativity right 右结合
    * 优先级(precedence n)

            infix operator +- { associativity left precedence 140 }
            func +- (left: Vector2D, right: Vector2D) -> Vector2D {
                return Vector2D(x: left.x + right.x, y: left.y - right.y)
            }
            let firstVector = Vector2D(x: 1.0, y: 2.0)
            let secondVector = Vector2D(x: 3.0, y: 4.0)
            let plusMinusVector = firstVector +- secondVector
            // plusMinusVector 此时的值为 (4.0, -2.0)

访问控制

上一篇 下一篇

猜你喜欢

热点阅读