在我们的应用程序中,我们有一项服务可帮助我们确定下一步应显示的模态UIVIewController
。每个ModalVIewController
都具有诸如dismiss()
之类的通用功能,但也具有其实现的特定功能。这就是我们尝试过的:
所有VC基本功能共有的基本协议。
protocol ModalScreenDelegate: AnyObject {
func modalScreenWantsToDissmiss(_ modalScreen: ModalScreen)
}
每个UIViewController
实现的基本协议
protocol ModalScreen: UIViewController {
var delegate: ModalScreenDelegate? { get set }
}
现在,我们创建具有ModalScreenDelegate
基本协议的特定实现的协议,如下所示:
protocol ShareToFacebookDelegate: ModalScreenDelegate {
func someCustomMethod()
}
并将其分配给:
class ShareToFacebookViewController: UIViewController, ModalScreen {
weak var delegate: ModalScreenDelegate? // **WORKS**
weak var delegate: ShareToFacebookDelegate? // **DOESN'T WORKS**
}
[如果我尝试使用ShareToFacebookDelegate
代替ModalScreenDelegate
,则编译器会引发IDE错误,说我必须将其更改回ModalScreenDelegate
。
为什么不起作用? ShareToFacebookDelegate
符合ModalScreenDelegate
。任何帮助将不胜感激。谢谢!
我认为是因为名字。
ModalScreen协议需要委托变量以实现一致性,同时您希望另一个变量“ delegate”符合ShareToFacebookDelegate。]]
尝试更改变量的名称。有用。我现在才尝试。