我试图创建一个闭包来清除我的缓存,这两个缓存都是实例变量。当我尝试调用[unowned self]时,我得到错误"' unowned可能只适用于类和类绑定协议类型,而不是(UIViewController) - > () - > UIViewController'" ....我不确定为什么提出这个问题。是否通过在实例变量中调用self来创建保留周期?如果是这样,为什么?提前谢谢,这是相关的代码片段
class UIViewController
{
var repostCache : [String : Bool] = [String : Bool]()
let clearRepostCache = { [unowned self] in
self.repostCache = [String : Bool]()
}
}
答案 0 :(得分:2)
问题是在第1阶段初始化完成之前你不能使用self
。因此,您无法将self
用于属性的初始值。
您可能需要使用self
某处将代码移动到实例方法中(或在phase1初始化后移植到初始化程序中)。
例如:
class ViewController: UIViewController {
var repostCache: [String: Bool] = [:]
private(set) var clearRepostCache: (()->Void)!
override func viewDidLoad() {
clearRepostCache = { [unowned self] in
self.repostCache = [:]
}
}
}
您可以在此处找到有关两阶段初始化的文档:
Class Inheritance and Initialization
关于令人困惑的诊断消息,最好发送错误报告。