[英]Swift Protocol - Property type subclass
我正在定义一个名为PanelController
的协议,我想在其中存储一个PanelView
。 PanelView
本身是UIView
的子类,定义了面板的基本结构。 我有三个不同的视图,它们是PanelView
子类: LeftPanel
, MidPanel
和RightPanel
。 对于每个面板,我想定义一个符合PanelController
协议的xxxPanelController
(左,中,右)。
我正在运行的问题是在协议和xxxPanelController
protocol PanelController {
var panelView: PanelView { get set }
...
}
和
class LeftPanelController: UIViewController, PanelController {
var panelView = LeftPanelView()
...
}
哪里
class LeftPanelView: PanelView {
...
}
和(最后一件......)
class PanelView: UIView {
...
}
我得到一个错误说: LeftPanelController does not conform to protocol PanelController
,原因很明显: panelView
的类型为LeftPanelView
而不是PanelView
。 这似乎真的限于我,因为LeftPanelView
是PanelView
的子类,所以它应该工作! 但事实并非如此!
有人可以向我解释为什么会这样,如果有人能想出一个,可能的解决方法? 谢谢!
问题在于协议中的setter。
比方说,你想要得到的panelView
从LeftPanelController
。 这没关系,因为LeftPanelView
可以完成PanelView
可以做的所有事情(以及更多)。
如果你想设置panelView
的LeftPanelController
,你可以给它任何PanelView
。 因为您将panelView
变量定义为LeftPanelView
,所以setter有时会失败。
要解决此问题,您可以在LeftPanelController
执行以下LeftPanelController
:
var panelView: PanelView = LeftPanelView()
这意味着您将无法访问任何特定于LeftPanelView
方法或属性,而无需先将其LeftPanelView
转换。 如果这不是问题,那么这应该可以解决您的问题!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.