前言

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

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

最新文章

  1. Facebook 帆布接入的总结
  2. 名词解释——Ext JS4
  3. 如何理解和熟练使用JS 中的call apply
  4. maven 常见错误解决
  5. 用php自带的filter函数验证、过滤数据 -转载
  6. C语言的一个关键字——static
  7. 何谓Dandy?它是一种着装风格
  8. BaseAdapter使listview设置不同背景图片并添加selector
  9. curl之post提交xml
  10. 一道看似简单的sql需求(转)
  11. ubuntu16.04 禁用Guest用户
  12. 前端面试题:css相关面试题
  13. bzoj 1835: [ZJOI2010]base 基站选址
  14. js 标签云
  15. Android数据库Sqlite-android学习之旅(九)
  16. IDEA环境下SSM整合------环境配置
  17. 向Spring容器中注册组件的方法汇总小结
  18. AJAX跨域问题以及解决思路(更新中)
  19. array_filter()函数
  20. 《Linux内核设计与实现》读书笔记六

热门文章

  1. Modbus常用功能码协议详解
  2. Office办公 WPS如何设置页边距
  3. TCP/IP, UDP, ICMP, ARP协议族简介--纯图慎点
  4. iOS 开发者证书总结 in-house
  5. ashx 一般处理程序中使用 Session
  6. linux2.6.30.4内核移植(1)
  7. Android 手把手带你玩转自己定义相机
  8. SpringBoot集成jdbcTemplate/JPA
  9. Android学习笔记五:四大组件(转)
  10. Centos 7 文件和目录管理