美文网首页
Swift 扩展

Swift 扩展

作者: 1剑天下 | 来源:发表于2019-09-27 09:37 被阅读0次

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

    • ✨✨ 扩展属性
    • ✨✨ 扩展计算属性
    • ✨✨ 扩展构造方法
    • ✨✨ 扩展方法
    • ✨✨ 使用扩展使某个类遵循一个协议
    • ✨✨ 值类型的扩展
    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
        }
        
    }
    

    相关文章

      网友评论

          本文标题:Swift 扩展

          本文链接:https://www.haomeiwen.com/subject/rnukuctx.html