具有基类的协议委托概念

时间:2019-05-17 04:41:37

标签: swift class delegates protocols

我对协议方法和类方法有疑问。下面的代码解释了我要实现的目标,

protocol Test {
    func abc()
}

class Base {
    func abc() { }
}

class MyCustomClass: Base, Test {

}

因此,问题是MyCustomClass将添加哪种方法?

在我的场景中,我想添加Test协议方法以及'Base'类方法。截至目前,这使我能够使用'override'关键字添加Base类方法。

那么,有谁知道我们如何同时访问Test ProtocolBase Class

是否可以在MyCustomClass中获得两个方法名称相同的方法?

1 个答案:

答案 0 :(得分:1)

您似乎不明白什么是协议。仅仅是保证其采用者包含某些成员的合同。

因此,让我们看一下您的代码,我仅对其做了一些修改:

protocol Test {
    func abc()
}

class Base {
    func abc() { print("Base abc") }
}

class MyCustomClass: Base, Test {

}

关于代码的重要一点是它可以编译。为什么?通过采用Test,MyCustomClass承诺它包含一个abc()函数。它保持承诺。怎么样?通过从其超类Base继承abc()函数。

至于“发生了什么”,只需尝试一下:

MyCustomClass().abc() // Base abc

我们实例化MyCustomClass,调用该实例的abc(),并且根据多态性定律,可以肯定的是,从Base运行继承的abc()

但这与协议无关!该协议无关紧要,在这里没有用。您可以从示例中完全删除该协议,并获得完全相同的结果。该协议只是对其采用者的描述。它说:“任何采用我的人都具有abc()函数,并且可以肯定的是,MyCustomClass采用了协议,而确实具有abc()函数。