swift 学习小计
mutating
1. 实例方法内部修改自身属性(struct、enum)class不需要加
2. Protocol中,用mutating标记的实例方法,才允许在结构体、枚举的具体实现中修改自身内存(属性)。如果是class遵循协议,则不需要标记。
required
1.子类修改父类的指定初始化器需要标记required,不需要标记override
2. 协议中定义初始化器,如果是final修饰的class遵序协议,实现时则不需要添加required。如果不是final修饰,则必须添加required。
3. 协议中定义的初始化器,如果正好重写了父类的指定初始化器,则必须添加required override
typealias
1.协议组合(可以最多包含一个class类型)
同时遵循Livable协议、Runnable协议且是Person或者其子类的实例
typealias RealPerson = Person(类类型) & Livable(协议) & Runnable(协议)
CaseIterabel
实现遍历枚举值的协议
enum Season:CaseIterabel{
case spring,summer,autumn,winter
}
let seasons = Season.allCases //数组 4个
for season in seasons{
pritn(season) // spring summer autumn winter
}
Any
代表任何类型(枚举、结构体、类 包括函数类型)
AnyObject
可以代表任何类类型(协议后面写上class 也可以代表这个协议只有类能遵循 现在已废弃)
is
判断是否是某种类型
as? as! as
强制类型转换
Self
1. 代表当前类
2. 作为返回值使用,限定返回值必须和方法调用者是同一类型
prefix
重载运算符中 代表 前置运算符