请把问题读到最后,因为它似乎与许多类似的问题重复,但事实并非如此。大多数其他问题使用带let
关键字的闭包在对象初始化之前捕获弱或无主的自我。我不。
我的代码:
class Singleton : ObserverProtocol {
static let shared = Singleton()
private let obs : Observer = Observer.init()
private init() { self.obs.responder = self }
func observe(_ object : Any) {}
fileprivate class Observer : NSObject {
unowned var responder : ObserverProtocol!
func observe(_ obj : Any) {
self.responder.observe(obj)
}
}
}
fileprivate protocol ObserverProtocol : class {
func observe(_ object : Any)
}
当我尝试编译时,我得到一个突出显示的错误unowned var responder : ObserverProtocol!
'unowned' 只能应用于类和类绑定协议类型,而不是 'ObserverProtocol!'
如果我更改unowned
为weak
我可以编译。
显然有一些unowned
我不明白的概念,所以如果有人可以向我解释,我将不胜感激。
PS我知道类似这样的多个问题:
UIView, CMDeviceMotionHandler : unowned 只能应用于类和类绑定协议类型
但我想这不是我的情况。