swift - 协议(protocol)之间的实现冲突

标签 swift oop inheritance protocols implementation

我偶然发现了一个问题,但我不知道该如何解决。

假设我们有一个基类(可能来自 FrameworkA),其属性名为 subject:

public class MyClass {
    public var subject: String
}

我们有一个协议(protocol)(可能来自 FrameworkB),具有另一个属性但名称相同:

public protocol MyProtocol {
    var subject: String { get }
}

这两个属性代表完全不同的东西。

如何创建一个继承自 MyClass 并实现 MyProtocol 的类? 我该如何使用这些属性?

public class SecondClass: MyClass, MyProtocol {
    var MyProcotol.name: String { // <==== Obviously not allowed
        return "something"
    }
    var MyClass.name: String { // <==== Obviously not allowed
        return "something else"
    }
}

我认为 C# 允许某种类型的声明,但我不是 100% 确定...

最佳答案

如果您可以控制这个基类和/或协议(protocol),您可以为属性指定唯一的名称,这样就可以解决问题。

如果您做不到,问题就变成了 SecondClass 是否真的必须自己履行这两个相互冲突的职责。具体来说,MyProtocol 是什么?一些委托(delegate)协议(protocol)?您可以改为让 SecondClass 提供一个符合该协议(protocol)的单独对象,从而消除相互冲突的双重角色。

最重要的是,与其让一个对象尝试服务于两个相互冲突的目的,不如将责任分解为单独的对象来解决任何此类冲突。

关于swift - 协议(protocol)之间的实现冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29967163/

相关文章:

ios - 动态调整tableview的高度

Xcode 6.1 编译错误

php - php构造函数中的父/子类型提示?

java - 新的 Obj,总是还是有时?

typescript 错误 : An outer value of 'this' is shadowed by this container

c# - 派生类定义的基类集合

c# - 如何使 UserControls 的代码隐藏继承基类?

swift - URLCache.cachedResponse(对于 :) and URLCache. getCachedResponse(对于 :completionHandler:) ?

c++ 基类未定义。在另一个类中包含基类和子类

swift - 在 SWIFT 的 View 中设置 alpha 一组元素