2017-06-15 77 views
0

我遇到了自定義類的初始化問題。當需要更新屬性的類被初始化時,我需要爲某些數據設置一個觀察者。最初,屬性可以是空的,這就是我在開始時設置它們的方式。但是,在所有成員初始化之前,Xcode仍會拋出一個閉包捕獲的「self」錯誤。這是一個縮短版本的代碼。初始化變量:在所有成員初始化之前由閉包捕獲的'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它似乎我只需要給屬性的初始值,但似乎並非如此。我寧願不必在初始化之後調用另一個函數來設置這些處理程序。

感謝您的幫助

+0

你在哪裏初始化'usersRef'變量? – Vyacheslav

+0

@Vyacheslav謝謝你,我錯過了這個問題,修正了它。 –

回答

1

嘗試使用此塊

{ [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 
     }) 
+0

我在查找解決方案時看到過'''[無主自我]''',但我並不完全瞭解它的目的。根據我的理解,這是創造一個弱參考?這是否會在檢查錯誤時創建其他可能的問題? –

+1

@JustinOroz https://stackoverflow.com/a/24320474/1979882 – Vyacheslav

+0

@JustinOroz我在使用這些包裝器時沒遇到過很大的問題 – Vyacheslav