实例变量中的无主自我引发问题

时间:2016-10-11 22:34:22

标签: ios swift

我试图创建一个闭包来清除我的缓存,这两个缓存都是实例变量。当我尝试调用[unowned self]时,我得到错误"' unowned可能只适用于类和类绑定协议类型,而不是(UIViewController) - > () - > UIViewController'" ....我不确定为什么提出这个问题。是否通过在实例变量中调用self来创建保留周期?如果是这样,为什么?提前谢谢,这是相关的代码片段

class UIViewController
{
    var repostCache : [String : Bool] = [String : Bool]()
    let clearRepostCache = { [unowned self] in
        self.repostCache = [String : Bool]()
    }
}

1 个答案:

答案 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

关于令人困惑的诊断消息,最好发送错误报告。