iur*_*iur 8 swift swift-protocols unowned-references
请将问题读到最后,因为它似乎是许多类似其他人的副本,但事实并非如此.大多数其他问题使用带let关键字的闭包来捕获对象init之前的弱或无主自我.我不.
我的代码:
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)
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译时,我会突出显示错误 unowned var responder : ObserverProtocol!
'unowned'可能只适用于类和类绑定协议类型,而不是'ObserverProtocol!'
如果我unowned改为weak我可以编译.
显然有一些unowned我不理解的概念,所以如果有人能向我解释,我将不胜感激.
PS我知道类似这样的多个问题:
UIView,CMDeviceMotionHandler:unowned只能应用于类和类绑定协议类型
但我想这不是我的情况.
sCh*_*Cha 15
如您所知,unowned不能是可选的,但weak可能nil在某些时候.
据我所知,unowned变量与隐式解包选项不同.隐式展开是针对变量的,可能是变量,nil但我们已经知道这个变量不在 nil准确的访问点.但是,unowned变量永远不会nil在任何时候.
因此,您不能使用unowned常量类型ObserverProtocol!.你需要摆脱!.
但是如果你真的摆脱了!,Observer需要一个初始化的初始化器responder.
| 归档时间: |
|
| 查看次数: |
4261 次 |
| 最近记录: |