【发布时间】:2015-08-26 16:01:22
【问题描述】:
我正在定义一个名为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 的子类,所以它应该可以工作!但事实并非如此!
有人可以向我解释这是为什么,如果有人能想出一个可能的解决方法吗?谢谢!
【问题讨论】:
-
它不符合,因为协议允许将 PanelView 的实例分配给 LeftPanelView 类型的属性。如果该属性在协议中声明为只读,则它应该编译。
-
我假设这个问题之前已经回答过了,但是我在手机上很难搜索到:)
标签: ios swift syntax protocols