提示信息

Swift 扩展

花格子衬衫 已关注

Swift 中的扩展(Extensions)允许你向已有的类、结构体、枚举类型和协议添加新功能,而不需要修改它们的源代码。这是 Swift 非常强大的一个特性,因为它可以帮助你遵循面向对象编程中开放/封闭原则(对扩展开放,对修改封闭)。

扩展可以做些什么?

  1. 添加计算属性和计算型类型属性
    扩展能够为现有类型添加计算属性,但不能添加存储属性或属性观察者。

    1. extension Double {
    2. var km: Double { return self * 1_000.0 }
    3. var m: Double { return self }
    4. var cm: Double { return self / 100.0 }
    5. var mm: Double { return self / 1_000.0 }
    6. }
    7. let oneKm = 1.km // 返回 1000.0
  2. 定义实例方法和类型方法
    可以为现有的类型添加新的实例方法和类型方法。

    1. extension Int {
    2. func repetitions(task: () -> Void) {
    3. for _ in 0..<self {
    4. task()
    5. }
    6. }
    7. }
    8. 3.repetitions {
    9. print("Hello!")
    10. }
  3. 提供新的构造器
    扩展可以为已有类型添加新的便利构造器,但不能为类添加指定构造器或析构器。

    1. struct Size {
    2. var width = 0.0, height = 0.0
    3. }
    4. extension Size {
    5. init(side: Double) {
    6. self.width = side
    7. self.height = side
    8. }
    9. }
    10. let square = Size(side: 10.0)
  4. 定义下标
    扩展可以为已有类型添加新下标。

    1. extension Int {
    2. subscript(digitIndex: Int) -> Int {
    3. var decimalBase = 1
    4. for _ in 0..<digitIndex {
    5. decimalBase *= 10
    6. }
    7. return (self / decimalBase) % 10
    8. }
    9. }
    10. 746381295[0] // 返回 5
  5. 嵌套类型
    扩展可以为已有的类、结构体和枚举类型添加新的嵌套类型。

使用扩展的注意事项

  • 扩展可以在多文件中实现一个类型的定义,这可以提升代码的可读性和组织性。
  • 如果扩展添加了遵循新的协议,协议的方法实现可以被分布到扩展中。
  • 扩展不能加存储属性,也不能重写已有类的功能。在继承体系中,需要通过子类化才能重写功能。

扩展是 Swift 语言中功能强大且灵活的一部分,非常适合灵活地为已有类添加功能而不影响原有代码。

    遇到难题? "AI大模型GPT4.0、GPT" 是你的私人解答专家! 点击按钮去提问......
花格子衬衫 关注 已关注

最近一次登录:2024-11-10 20:45:33   

暂时还没有签名,请关注我或评论我的文章
×
免费图表工具,画流程图、架构图