我偶然发现了一个问题,但我不知道该如何解决。
假设我们有一个基类(可能来自 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/