如何在init()中初始化一个在闭包中赋值给self的对象?

时间:2017-03-30 16:39:39

标签: ios swift firebase firebase-realtime-database

我在Firebase数据库周围有一个数据库包装器类,我想要缓存Firebase快照,因此我有这个代码:

@objc final class Database : NSObject
{
    var spamRef: FIRDatabaseReference!  = nil
    var snapshot:FIRDataSnapshot?       = nil

    override init()
    {
        FIRDatabase.database().persistenceEnabled = true
        FIRApp.configure()
        spamRef = FIRDatabase.database().reference(withPath: "spam_list")
        _ = spamRef.observe(FIRDataEventType.value, with: { (theSnapshot) in
            self.snapshot = theSnapshot
            ...

这导致'在初始化所有成员之前由闭包捕获自己'。

我知道错误意味着什么,原因是什么;我的问题是什么是解决它的优雅解决方案。

如果我将闭包移出init()并进入一个在init完成后调用的单独函数,那么仍然需要调用该单独的函数。 如果它由创建数据库对象的代码显式调用,那么我不认为这是一个很好的解决方案 - 调用代码现在暴露于实现的内部和责任,需要调用此函数。

init()方法当然不能直接调用这个方法,但它可以调度在微秒延迟后调用的函数(因此运行循环将完成,init()将在之前完成新功能被称为)。 但这看起来很笨拙。

什么是优雅的解决方案?

0 个答案:

没有答案