外封访问火力地堡变量外封访问火力地堡变量(Access Firebase variable outs

2019-05-12 13:35发布

我试图用火力地堡设置在我的CollectionView细胞的数量。 我试图创建一个局部变量,并设置为相同的值作为火力地堡变量,但是当我尝试使用它的功能外它不工作。 我也试过在viewWillAppear中设置它,但它没有工作。

我设置的导航栏标题查看值。 当它在封闭设置,我得到了正确的值,当我写,封闭外(后火力功能),它给了一个0值。

我使用SWIFT 3

override func viewWillAppear(_ animated: Bool) {

        FIRDatabase.database().reference(withPath: "data").child("numCells").observeSingleEvent(of: .value, with: { (snapshot) in

            if let snapInt = snapshot.value as? Int {


               // self.navigationItem.title = String(snapInt)
                self.numCells = snapInt


            }

        }) { (error) in
            print(error.localizedDescription)
        }

        self.navigationItem.title = String(numCells)

    }

...

 override func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of items


       return numCells

    }

Answer 1:

火力地堡是asyncronous,当它是从火力封闭内返回的数据才有效。

 FIRDatabase.database().reference(withPath: "data").child("numCells")
                      .observeSingleEvent(of: .value, with: { snapshot in
      if let snapInt = snapshot.value as? Int {
           self.navigationItem.title = String(snapInt)
      }
 })

从拓展,假设我们要填充被用作的tableView数据源的数组。

class ViewController: UIViewController {
    //defined tableView or collection or some type of list
    var usersArray = [String]()
    var ref: FIRDatabaseReference!

     func loadUsers() {
          let ref = FIRDatabase.database().reference()
          let usersRef = ref.child("users")

          usersRef.observeSingleEvent(of: .value, with: { snapshot in
              for child in snapshot {
                  let userDict = child as! [String: AnyObject]
                  let name = userDict["name"] as! string
                  self.usersArray.append[name]
              }
              self.myTableView.reloadData()
          })
     }
     print("This will print BEFORE the tableView is populated")
}

请注意,我们填充阵列,这是一类变种,从封闭中,一旦该数组被填充,仍然封闭中,我们刷新了的tableView。

需要注意的是作为代码同步运行,因此会被关闭print语句后实际发生的代码比互联网更快的tableView填充之前会发生打印功能。



文章来源: Access Firebase variable outside Closure