self我知道,Self是什么鬼?其实Self我们会时不时遇到的,只是我们没有注意而已。
Self
Self其实主要使用在协议中:
protocol ProtocolTest {
// 协议定一个方法,接受实现该协议的自身类型并返回一个同样的类型
func testMethod(c: Self) -> Self
//Self 不仅指代的是实现该协议的类型本身,也包括了这个类型的子类
}
// 当这个协议被UIView或者UIView子类使用的时候,默认实现testMethod方法,后续实现类可以再进行重写。
extension ProtocolTest where Self: UIView{
func testMethod(c: Self) -> Self {
return c
}
}
self
除了指向当前类或者结构体对象外,self还可以获取当前类的元类型
- Class.self: Class.Type当前类的元类型
元类型还可以通过type(of:Class())来获取
.self 取到的是静态的元类型,声明的时候是什么类型就是什么类型。type(of:)取的是运行时候的元类型,也就是这个实例 的类型。
- class().self: class()当前对象
用法可以结合https://www.jianshu.com/p/ee5feb763fce来看。