Swift 扩展

179 阅读1分钟

扩展可以扩展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() { } }