具有弱属性的Swift通用协议 - '弱'可能只适用于类绑定协议

时间:2018-04-09 10:14:09

标签: ios swift generics protocols weak-references

通过基于通用的协议查看我认为是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

Error

现在,如果我错了,请更正我,但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。不确定这里发生了什么?

0 个答案:

没有答案