2017-04-04 35 views
1

我想通过使用观察者从firebase获取数据。但是当我尝试将值追加到我之前创建的数组中时,它失败了。这里是代码,有人可以帮我吗?swift3 append函数在firebase里面不起作用observeSingleEvent

class ProductTableViewController: UITableViewController{ 
    var productName:[String] = [] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     fetchProduct() 
     print(self.productName.count) 
    } 

    func fetchProduct(){ 
     let currentUserId = FIRAuth.auth()?.currentUser?.uid 

     FIRDatabase.database().reference().child("users").child(currentUserId!).child("products").observe(.value, with: { (snapshot) in 
       self.productName.append("Hello") 
     }, withCancel: nil) 
    } 

应该打印1我追加值成​​数组 之后,但它打印0

+1

在'print'行和'append'行上放置一个断点。现在运行你的代码并注意哪一个被首先调用。 – rmaddy

+0

这是因为Firebase侦听器是异步的。您应该能够在Swift中在线找到大量示例,了解如何处理此问题。 –

回答

0

你要知道,火力地堡观察者是异步的,所以即使你第一次调用它,它会必须等待回应。在此期间,您的应用程序将继续执行其余的代码,因此它将调用打印功能。如果你想证明它,请尝试将打印内的火力点呼叫:

class ProductTableViewController: UITableViewController{ 
var productName:[String] = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 
    fetchProduct() 

} 

func fetchProduct(){ 
    let currentUserId = FIRAuth.auth()?.currentUser?.uid 

    FIRDatabase.database().reference().child("users").child(currentUserId!).child("products").observe(.value, with: { (snapshot) in 
      self.productName.append("Hello") 
      print(self.productName.count) 
    }, withCancel: nil) 
} 

希望它有帮助!

+0

谢谢,它真的有帮助 –

+0

不客气! –