Swift 关键字作用
1. final
final正确的使用场景 - 权限控制
也就是说这个类或方法不希望被继承和重写,具体情况如下:
(1)类或者方法的功能确实已经完备了
这种通常是一些辅助性质的工具类或者方法,特别那种只包含类方法而没有实例方法的类。比如MD5加密类这种,算法都十分固定,我们基本不会再继承和重写。
(2)避免子类继承和修改造成危险
有些方法如果被子类继承重写会造成破坏性的后果,导致无法正常工作,则需要将其标为final加以保护。
(3)为了让父类中某些代码一定会执行
父类的方法如果想要其中一些关键代码在继承重写后仍必须执行(比如状态配置、认证等)。我们可以把父类的方法定义成final,同时将内部可以继承的部分剥离出来,供子类继承重写。
2. @objc
@objc 暴露swift方法给oc使用
3. dynamic
dynamic 添加动态特性 (修饰方法依然是 V-table 调用)
可通过@_dynamicReplacement动态改变方法替换执行
extension LGTeacher{
10
// @_dynamicReplacement(for: teach)
11
func teach1() {
12
print(
"teach1"
)
13
}
14
}
4. @objc+dynamic
@objc+dynamic (修饰方法是动态调用)