协议可以用来定义方法、属性、下标的声明,协议可以被枚举、结构体、类遵守(多个协议之间用逗号隔开)
-
协议中定义方法时不能有默认参数值 默认情况下,
-
协议中定义的内容必须全部都实现
-
也有办法办到只实现部分内容,
-
协议定义属性必须var
-
实现协议时的属性权限要不小于协议中定义的属性权限
-
协议定义get、set,用var存储属性或get、 set计算属性去实现
-
协议定义get,用任何属性都可以实现
-
为了保证通用,协议中必须用static定义 类型方法、类型属性、类型下标
-
只有将协议中的实例方法标记为mutating 才允许结构体、枚举的具体实现修改自身内存 类在实现方法时不用加mutating,枚举、结构体才需要加mutating
-
协议中还可以定义初始化器init (非final类实现时必须加上required)
-
如果从协议实现的初始化器,刚好是重写了父类的指定初始化器 那么这个初始化必须同时加required、 override
枚举遵循CaseIterable协议支持遍历
enum Season : CaseIterable {
case spring,summer,autumn,winter
} for season in Season.allCases {
print(season)
}
CustomStringConvertible