初始化变量:在初始化所有成员之前由闭包捕获的'self'

时间:2017-06-15 07:01:43

标签: ios swift firebase firebase-realtime-database

我在初始化自定义类时遇到问题。当初始化类更新属性时,我需要在某些数据上设置一个观察者。最初,属性可以为空,这就是我在启动时设置它们的方式。但是,在所有成员初始化之前,Xcode仍会抛出由关闭捕获的“'self'”错误。这是代码的缩短版本。

class Foo {
    init() {
        self.usersRef = ref.child("users")
        self.usersRef.observe(DataEventType.value, with: { (snapshot) in
            // snapshot error checking
            // users is [String]

            self.users = users
        })
    }

    private var usersRef: DatabaseReference
    private(set) var users: [String] = []

}

我也试过

class Foo {
    init() {
        self.users = [String]()
        self.usersRef = ref.child("users")
        self.usersRef.observe(DataEventType.value, with: { (snapshot) in
            // snapshot error checking
            // users is [String]

            self.users = users
        })
    }

    private var usersRef: DatabaseReference
    private(set) var users: [String]

}

确保在回调之前进行初始化。

From this question似乎我只需要给出属性初始值,但似乎并非如此。我希望在初始化之后不必调用另一个函数来设置这些处理程序。

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

尝试使用此块

 { [unowned self] (snapshot) in
            // snapshot error checking
            // users is [String]

            self.users = users
        })

{ [weak self] (snapshot) in
            // snapshot error checking
            // users is [String]

            self?.users = users
        })