Swift 扩展

2019-09-27  本文已影响0人  1剑天下

⚠️ 扩展可以向类型添加新功能,但不能覆盖现有功能。

protocol extensionClassProtocol {
  func protocolFunc()

}
class extensionClass:NSObject {

  private var key: Void?
  var name:String
  var ageOld = 10
  
  init(param1:String,params2:String)
  {
      name = param1
  }
  
}
1. 扩展属性 扩展只能添加计算属性,可以通过runtime添加储存属性
extension extensionClass
{
   var info:String?{
    get{
        return objc_getAssociatedObject(self, &key) as? String
    }

    set(newValue){
        objc_setAssociatedObject(self, &key, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    }
    }
    
}

2. 扩展构造方法

扩展可以向类添加新的便利构造器,但是它们不能向类添加新的指定构造器或析构器。指定构造器或析构器必须始终由原始类实现提供

extension extensionClass
{

    convenience init(param3:String,params4:Int)
    {
        self.init(param1: param3,params2: "1")
    }
}

3.扩展计算属性 (计算属性:通过其他属性计算而来)

extension extensionClass
{
    var age:Int{
        return self.ageOld+1
    }
    
}

4. 扩展方法

extension extensionClass
{
    //扩展实例方法
    func myFunc(param:String)  {
        print(param)
    }
    // 扩展类方法
    class func myClassFunc()
    {
        print("my class func for extension")
    }
}
5. 使用扩展使某个类遵循一个协议
extension extensionClass:extensionClassProtocol
{
    func protocolFunc() {
        print("extensionClassProtocol for extension")
    }
    
    
}
6.值类型的扩展
extension Int
{
    //对值类型进行扩展时,可以使用mutating修饰方法,使得方法内部可以直接修改当前实例的本身
    mutating func change(){
        self = self*self
    }
    
}
上一篇下一篇

猜你喜欢

热点阅读