请仔细阅读问题,因为它似乎是许多类似问题的重复,但实际上并不是。大多数其他问题使用带有“let”关键字的闭包来捕获对象初始化之前的弱引用或无主引用self。但我不这样做。
我的代码:
当我尝试编译时,
我的代码:
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' may only be applied to class and class-bound protocol types, not 'ObserverProtocol!'
unowned
更改为 weak
,则可以编译。 很明显,我不理解 unowned
的某些概念,所以我希望有人能给我解释一下。 P.S. 我知道有许多类似于这个问题的问题: UIView, CMDeviceMotionHandler : unowned may only be applied to class and class-bound protocol types 但我认为这不是我的情况。