【问题标题】:Protocol Delegate Concept With Base Class具有基类的协议委托概念
【发布时间】:2019-05-17 13:31:22
【问题描述】:

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

protocol Test {
    func abc()
}

class Base {
    func abc() { }
}

class MyCustomClass: Base, Test {

}

那么,问题是MyCustomClass 将添加哪个方法?

在我的场景中,我想添加Test 协议方法以及“Base”类方法。截至目前,这允许我添加带有“覆盖”关键字的Base 类方法。

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

是否有可能在MyCustomClass 中获取包含相同方法名称的两个方法?

【问题讨论】:

  • Basefunc abc() 所以你的基类已经实现了abc() 所以编译器不会抱怨。但这在MyCustomClass 中同时使用是没有意义的

标签: swift class delegates protocols


【解决方案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() 函数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多