Tags: Swift 学习笔记
发布时间:2015-08-15
修改时间:2015-08-15
作者:Erwin
博客地址:技术杂货铺
欢迎转载,转载请注明出处。
Swift学习笔记系列——(21)协议
协议用来做什么?
协议的实现有谁来做?
类、结构体和枚举
协议定义
属性要求
实例属性or类型属性
类型属性采用static关键字
属性名字
属性类型
读写or只读
方法要求
实例方法or类型方法
类型方法用static关键字声明
类遵循协议实现类型方法可以用static,也可以用class
变异方法要求
用mutating标记协议中的方法,就是声明这个方法如果由结构体和枚举实现,需要修改自身属性。
类可以协议的实现变异方法,但不要是使用mutating关键字。
构造方法要求
类实现协议要求的构造方法
用指定构造方法和方便构造方法实现都可以
都要用required修饰符标记
final构造方法不能再用required了
重写指定构造方法和实现协议要求的构造方法不冲突,这种情况required 和 override 都要有
可失败构造方法要求
协议要求的可失败构造方法的实现不受限制;
协议要求的不可失败构造方法可以由不可失败构造方法或者init!构造方法实现。
可选的协议要求
有可选要求的协议用@objc标记
协议可选的内容用optional标记
可选链适用于对协议可选内容的访问
协议继承
只对类开放的协议
协议的组合
将两个以上协议组合成一个临时的组合体,当作类型使用。
协议扩展
给协议提供默认的实现
扩展协议,送给实现类型一个协议要求的默认实现,不推辞的话就用了,想推辞就自己再写一套实现。
给协议扩展添加额外的约束
where语句添加约束条件,在这些约束条件下,这种扩展才生效
如果一个实现类型满足多个约束条件,Swift将会使用最特殊的
使用协议
协议作为类型
函数、方法和构造方法的参数或者返回值的类型
常量、变量或者属性的类型
数组、字典以及其他集合中元素的类型
是否满足协议的检查
is检查是否满足协议
造型
as?向下造型返回可选值
as!强制向下造型
委托设计模式
协议的实现
通过扩展添加对协议的实现
对类型的扩展中添加对协议实现,结果是类型的实例不论是在扩展前还是扩展后初始化的,都有了协议中的内容。
对于已经实现了协议的类型,需要通过空的扩展,声明实现了协议才可以当作协议类型使用。