扩展可以扩展class(类)、struct(结构体)、enum(枚举)、protocol(协议)
可以添加计算属性、可以定义方法、可以定义类型、可以让类型遵守协议
不可以覆盖原有的功能
不能添加存储属性
Swift extensions(扩展) 在给已经存在cocoa系统类添加功能提供了巨大的灵活性,但是和OC一样存在着一样的问题:category的局限性;也就是说不能通过扩展添加一个属性给已经存在的类,OC的runtime关联属性的方法在解决category的局限性上起了巨大的作用,OC可以和Swift混编,可以互用各自的方法和类, swift可以使用OC的runtime的接口.
为了简洁的需要可以把代理用扩展的方式来写
extension GLJVIPVC:UICollectionViewDelegate,UICollectionViewDataSource,GLJHomeCollectionViewDelegateLayout {
}
扩展现有类型去遵守协议(p为自定义协议)
extension Array : p{
}
扩展不可以重写父类的方法,如果要重写必须在父类里加上@objc dynamic 简单解释一下:extension走的都是直接派发,直接派发是没有继承和多态的,当加了关键词@objc dynamic后走的是消息派发机制是有继承和多态的。具体可以看swift消息派发
class A { @objc dynamic func k() { } }
class B: A {
}
extension B { override func k() { } }