Swift弱委托运行时错误(访问错误).Bug



我在Swift (OSX)中的委托有一个问题。我有一个视图,通过弱引用连接到一个委托。简化后的代码可以像这样:

protocol MyProtocol: class {
    func protocolFunc() -> Int
}
class MyController : MyProtocol {
    func protocolFunc() -> Int { return 2 }
}
class MyView : NSView {
    weak var delegate: MyProtocol?
    func grabData {
        var data = delegate?.protocolFunc()
    }
}

当调用delegate?.protocolFunc()时,应用程序崩溃,说"访问不良"。就像如果MyController实例消失了…但事实并非如此。MyController实例驻留在NSDocument的子类中;并且视图的委托被正确设置。

如果我将委托声明为strong,崩溃就会消失。但问题是,我希望委托是weak。这是怎么呢在我看来,弱引用应该有效。

在撰写本文时(Xcode 6 Beta 5),有一个弱委托的错误。目前,在它被修复之前,你所能做的就是将protocol MyProtocol: class更改为@objc protocol MyProtocol,并避免在协议中使用任何纯Swift类。

一个临时的替代解决方案是:

weak var delegate: MyProtocol?

:

weak var delegate: MyController?

当然,它违背了MyProtocol的目的,然而,它允许你使用纯Swift类,而我们等待一个适当的修复。

最新更新