Swift教程第二章(6)–Swift基础
扩展、协议
##扩展 注意:如果定义一个扩展,此扩展对该类型的所有已有实例都是可用的
使用关键字extension
###扩展属性
###扩展构造器
###扩展方法
###修改实例方法
使用关键字mutating
###下标(使用内部脚本实现)
向Int添加一个下标,返回十进制数字从又想做的第n个数字
##协议
使用关键字protocol
用于统一方法和属性的名称,而不是现任和功能。协议能够被类、枚举、结构体实现,满足协议要求的类、枚举、结构体被称为协议的遵循着
很像其他语言的接口:)
语法:
###属性要求
用类实现协议时,使用class
关键字来表示属性为类成员,用结构体或枚举实现协议时则使用static
关键字来表示
###方法要求
###突变方法要求
能在方法或函数内部改变实力类型的方法成为突变方法,使用关键字mutating
注意:用class实现协议中的mutating方法时,不用谢mutating关键字,用结构体、枚举实现协议中的mutating方法是必须有mutating关键字
###协议类型
协议本身不识闲任何功能,但可以将它当做类型来使用,场景如下:
- 作为函数,方法或构造其中的参数类型,返回值类型
- 作为常熟,变量、属性的类型
- 作为数组,字典或其他容器中的元素类型
###委托(代理)模式 允许类或结构体将一些需要他们负责的功能委托给其他类型。定义协议来封装那些需要被委托的和你熟和方法,使其遵循者拥有这些被委托的函数和方法。委托模式可以用来响应特定的动作或接受外部数据员提供的数据,而不需要知道外部数据源的类型。
###通过延展补充协议声明
当一个类型已经实现了协议中的所有要求,却没有声明时,使用extension
关键字声明补充协议声明
把hamster当做SomeProtocol类型使用时还需要显示的类型转换
###协议的继承 一个协议可以继承其他的协议
###协议合成 一个协议可由多个协议采用protocol<SomeProtocol,AnotherProtocol>这样的格式进行组合,成为协议组合(protocol composition)
注意:协议合成并不会生成一个新协议类型,而是将多个协议合成一个临时的协议,超出范围后立刻失效。
###可选协议类型
使用关键字@optional
标记可选择实现的属性或方法,在协议前使用@objc