【发布时间】:2015-04-30 11:57:08
【问题描述】:
我偶然发现了一个问题,我不知道该如何解决。
假设我们有一个基类(可能来自 FrameworkA),其属性名为subject:
public class MyClass {
public var subject: String
}
我们有一个协议(可能来自 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% 确定...
【问题讨论】:
-
您需要相应地命名事物。如果它们不同,则需要不同的名称。
-
是的,当然 :) 但是,如果我对此无能为力,例如,基类和协议是某些框架(甚至是单独的框架)的一部分,该怎么办?
-
@ThomasKilian 我不同意你的观点,这是一个很好的问题,解决方案并不总是相应地设置事物的名称,这样的事情可能会发生并且语言(编译器)必须是有解决办法
-
好的,所以要解决问题,您可以向 Apple 发送错误报告并等待几年。那没有帮助。如果有人在声明协议时使用了合理的名称,那么您可以相应地为您的方法命名。
-
是的,框架开发人员应该使用合理的名称。但应用程序开发人员也应该停止使用单个类来尝试实现太多不同(在这种情况下是相互冲突的)目的。
标签: swift oop inheritance protocols implementation