swfit 系统协议介绍

54 阅读1分钟

/// 先学习几个系统协议

///  1.ExpressibleByArrayLiteral 系列。 这个协议系列是 通过语法糖直接初始化结构体或者类的 方式。 重写一个方法。

///  2. Equatable 协议。 == 双等号操作符的一个协议,判断两个对象是否相等

///     首先 结构体 都是遵循Equatable 。 也就是默认两个结构能够用==号进行比较。 ==方法的默认实现是 比较这个结构体的所有存储属性是否相等。 不会比较计算属性。

///     其次 如果结构体 里面的存储属性 有不能够用== 比较的属性存在。则不能用==比较。需要手动显示遵守Equatable 实现 static == ()->bool 方法。 才可以用== 。至于什么类型的存储属性不能用==比较。下面介绍

///     再来说 类的Equatable协议。 swfit 的类, 如果不遵守NSObject 。默认是不会实现Equatable 协议的。 也就是 不遵守NSObject的类 不能使用==协议。

///     尊许了 NSObject 的类。 可以使用Equatable协议。 那是因为 NSObject 遵循了Equatable协议 实现了 ==方法。 NSObject 类 比较的是 两个对象的指针是否相等。

///     最后说 枚举。 枚举分三种, 一个是 最普通的

///     enum CompassPoint { case north, south, east, west }

///     这类 没有 原始类型的枚举。 默认是遵守Equatable协议的。可以比较

///     第二种, 有原始值的 枚举 enum CompassPoint:Int { case north = 1, south, east, west }

///     这类枚举也是遵循Equatable协议的。 比较的时候 就是比较枚举的case的。

///     第三种是关联值枚举 enum Barcode { case upc(Int, Int, Int, Int) case qrCode(String) }

///     这类枚举 需要自己手动实现Equatable协议。并且实现 static ==  () -> bool 方法才可以实现枚举比较