Swift学习笔记系列——(21)协议

来源:互联网 发布:java 监听 编辑:程序博客网 时间:2024/05/17 04:11

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!强制向下造型

委托设计模式

协议的实现

通过扩展添加对协议的实现

对类型的扩展中添加对协议实现,结果是类型的实例不论是在扩展前还是扩展后初始化的,都有了协议中的内容。
对于已经实现了协议的类型,需要通过空的扩展,声明实现了协议才可以当作协议类型使用。

本章思维导图

这里写图片描述

0 0
原创粉丝点击