一个类的所有子类的Swift扩展

时间:2019-01-28 06:07:09

标签: ios swift

是否可以为从 A类继承的所有类编写扩展名 使用这样的代码:

extension T where T: A { 
    override func someMethod() {}
}

编辑:

我的具体需求是在其子类中重写某个类A(不是协议的类!)的方法,并在所有子类中执行相同的实现(而无需定义另一个类 B 从类 A 继承,然后从 B 继承) 我认为扩展是使用通用类型 T 的一种好方法,它指定 T 是从 A 继承的,但是迅速不允许。有什么办法吗?

另一个编辑

A 是内置类,具有 someMethod()也是内置方法

2 个答案:

答案 0 :(得分:1)

不幸的是,您不能以通用方式覆盖超类 HumanMother 中的方法……然而……我个人觉得这很烦人。类层次结构和扩展不能像这个很酷的例子那样在 swift 中很好地协同工作。

如果你想为所有子类定义一个方法(而不是覆盖),这将起作用:

首先定义一个协议:

protocol BigMamma {
   func damnGirl()
}

然后为“HumanMother”类型的子类定义它。

extension BigMamma where Self: HumanMother {
   func damnGirl() {
      print("Yeah Boi")
   }
}

参考:https://www.vadimbulavin.com/multiple-inheritance-swift/

答案 1 :(得分:0)

根据您的问题和评论,建议您执行以下操作:

  1. 创建“内置类”的子类
  2. 覆盖此子类中所需的方法
  3. 从您覆盖的子类中创建子类
  4. 使用覆盖方法

当您继承并覆盖这样的特定方法时:

override func viewDidLoad() {
    super.viewDidLoad()

    // do stuff
}

然后,子类也使用此方法中实现的所有内容。如果现在在此类的子类中再次重写此方法,则super.viewDidLoad()将调用子类的重写代码。

希望有帮助!