zoukankan      html  css  js  c++  java
  • Swift 扩展

    前言

    • 扩展就是给一个现存类、结构体、枚举或者协议添加新的属性或者方法,无需修改目标的源代码,就可以把想要的代码加到目标上面。

      • 扩展可以用来扩展现有类型的计算属性、构造器、方法和下标。
      • 不能添加一个已经存在的方法或者属性。
      • 添加的属性不能是存储属性,只能是计算属性。
    • 在定义扩展时,在类型名前使用关键字 extension

      extension 某个现有类型 {
          
          // 增加新的功能
      }
      

    1、扩展计算属性

    • 扩展计算属性

      class Transport {
      
          var scope: String
      
          init(scope: String) {
              self.scope = scope
          }
      }
      
      extension Transport {
      
          // 扩展计算属性
          var extProperty: String {
          
              get {
                  return scope
              }
          }
      }
      
      var myTrans = Transport(scope: "ludi")
      print(myTrans.extProperty)                          // ludi
      

    2、扩展构造器

    • 扩展构造器

      class Transport {
      
          var price = 30
      
          var scope: String
      
          init(scope: String) {
              self.scope = scope
          }
      }
      
      extension Transport {
      
          // 扩展构造器
          convenience init(price: Int, scope: String) {
          
              self.init(scope: scope)
              self.price = price
          }
      }
      
      var myTra1 = Transport(price: 50, scope: "ludi")    // 使用扩展构造器,价格为 50
      var myTra2 = Transport(scope: "haiyang")            // 使用原构造器,介个属性的值仍为 30
      

    3、扩展方法

    • 使用扩展增加方法的做法非常灵活,除了可在自定义的类中扩展方法外,还可以扩展基本数据类型的方法,比如扩展整数类型。

      // 扩展基本数据类型
      extension Int {
      
          func calculate() -> Int {
              return self * 2
          }
      }
      
      var i = 3
      i.calculate()       // 6    
      

    4、扩展下标

    • 扩展下标

      extension Int {
      
          // 扩展下标
          subscript(num: Int) -> Int {
              return self * num
          }
      }
      
      var i = 3
      i[2]                    // 6
      

    5、扩展协议

  • 相关阅读:
    深究AngularJS——自定义服务详解(factory、service、provider)
    学习AngularJs:Directive指令用法(完整版)
    理解Angular中的$apply()以及$digest()
    javascript关闭网页的几种方法
    grunt
    原生ajax
    服务器返回JSON,IE出现下载问题
    设计模式学习笔记——Mediator中介者模式
    Html.Partial
    SAML
  • 原文地址:https://www.cnblogs.com/QianChia/p/8655153.html
Copyright © 2011-2022 走看看