从具有相同超类的多个类继承 - 解决方法

时间:2016-06-30 20:44:10

标签: swift swift3

以下情况:

STDisjoint()

我怎样才能实现以下目标:

class Sprite{ // has to be a class, not a protocol!
    func s(); // can not be changed
}
class Element: Sprite{
    // needs s(); for:
    func e();
}
class Wiggle: Sprite{
    // needs s(); for:
    func w();
}

这不起作用,因为Cursor Wiggle和Element都从Sprite继承。

因此我在考虑使用像:

这样的扩展方法
class Button: Wiggle{
    // needs s();
    // needs w();
}
class Cursor: Element, Wiggle{
    // needs s();
    // needs w();
    // needs e();
}
class Pointer: Element{
    // needs w();
    // needs e();
}

如何延长class Button:Sprite{ // needs s(); // needs w(); } class Cursor: Element{ // needs s(); // needs w(); // needs e(); } class Pointer: Element{ // needs w(); // needs e(); } extension Button, Cursor { // or similar to make w() available in Button & Cursor // using s() for: // func w(); } & Button只需一步即可完成?

1 个答案:

答案 0 :(得分:1)

您可以将w()置于自己的协议中,例如WableButton符合的Cursor。为Wable提供w()默认实现。由于w()取决于s(),因此您必须对扩展程序施加约束,以便仅适用于从Sprite派生的符合类型("来源" of { {1}})。

s()