通过基于通用的协议查看我认为是Swift中的错误。协议如下:
protocol Coordinated {
associatedtype GenericCoordinatingDelegate: CoordinatingDelegate
weak var coordinatingDelegate: GenericCoordinatingDelegate? { get set }
}
protocol CoordinatingDelegate: NSObjectProtocol { }
Xcode显示错误,但声称'weak' may only be applied to class and class-bound protocol types, not Self.GenericCoordinatingDelegate
。
现在,如果我错了,请更正我,但GenericCoordinatingDelegate
此处约束于下面定义的CoordinatingDelegate
协议类型,该类型派生自NSObjectProtocol
,因此将其约束为仅限课程。 Swift可以看到这一点,因此应该允许weak
修饰符用于从它派生的属性。
任何人都可以看到我错过的任何内容,或者这实际上是Swift中的错误吗?
修改
感谢您的建议,Hamish,我编辑了我的代码以反映这一点。但是,我现在又遇到了一个奇怪的问题。
class WelcomeIntroViewController: UIViewController, OnboardingViewController, TwoPartGradientLayerProvider, Coordinated {
typealias GenericCoordinatingDelegate = WelcomeCoordinatingDelegate
weak var coordinatingDelegate: GenericCoordinatingDelegate?
这是上面定义的协议的实现,但是,Swift声称视图控制器不符合协议,并尝试添加另一个typealias
。它将持续执行此操作,即使使用50个匹配typealias
es。不确定这里发生了什么?