简单协议继承一致性的解决方法

问题描述 投票:0回答:1

在我们的应用程序中,我们有一项服务可帮助我们确定下一步应显示的模态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。任何帮助将不胜感激。谢谢!

swift inheritance protocols subclass swift-protocols
1个回答
0
投票

我认为是因为名字。

ModalScreen协议需要委托变量以实现一致性,同时您希望另一个变量“ delegate”符合ShareToFacebookDelegate。]]

尝试更改变量的名称。有用。我现在才尝试。

© www.soinside.com 2019 - 2024. All rights reserved.