Swift:未设置整数值。

时间:2017-01-10 03:07:23

标签: ios swift

在我的ViewController类的顶部,我有这个变量:

var allInCategory: Int = 0

然后在ViewDidLoad中我调用了一个函数和一个变量的print:

getRandomQuestion()
print(allInCategory)

在该功能中,我有一个Firebase电话:

 let queryRef2 = FIRDatabase.database().reference().child("Questions").child(cat)
    queryRef2.observeSingleEvent(of: .value, with: { snapshot in

        self.allInCategory = Int(snapshot.childrenCount)


    })

我似乎在修改变量时遇到了一些问题。在控制台中输出:

  

0

如果我把print变量放在这样的函数中:

let queryRef2 = FIRDatabase.database().reference().child("Questions").child(cat)
    queryRef2.observeSingleEvent(of: .value, with: { snapshot in

        self.allInCategory = Int(snapshot.childrenCount)
        print(self.allInCategory)

    })

控制台中的输出为:

  

0

     

30

我想也许这可能是由于从firebase获取该请求所需的时间。所以我将它包装在一个像这样的调度组中:

viewDidLoad中

getRandomQuestion()

    group.notify(queue: DispatchQueue.main, execute: {
        print("left group")
        print(self.allInCategory)
    })

并在函数中:

group.enter()

    let queryRef2 = FIRDatabase.database().reference().child("Questions").child(cat)
    queryRef2.observeSingleEvent(of: .value, with: { snapshot in

     self.allInCategory = Int(snapshot.childrenCount)


    })

group.leave()

但现在控制台输出是这样的:

  

左组

     

0

任何人都可以帮我解决这个问题吗?我希望这不是完全没用的东西,我想念。

1 个答案:

答案 0 :(得分:0)

您需要将group.leave()放在完成块内。这是处理异步调用的正确方法。

group.enter()

let queryRef2 = FIRDatabase.database().reference().child("Questions").child(cat)
queryRef2.observeSingleEvent(of: .value, with: { snapshot in
    self.allInCategory = Int(snapshot.childrenCount)

    group.leave()
})