为什么我的Print语句没有被执行?

时间:2017-02-25 19:50:27

标签: ios swift firebase firebase-realtime-database

我在我的功能中设置了断点,一切运行正常,但是当涉及到打印部分时,它总是跳过它。

func testForGettingAllValues(){
 let uid = user2?.id
    let ref = FIRDatabase.database().reference().child("user-reviews").child(uid!)
    ref.observe(.childAdded, with: {(firstSnapshot) in

        let reviewId = firstSnapshot.key
        let messageReference = FIRDatabase.database().reference().child("reviews").child(reviewId)
        messageReference.queryOrdered(byChild: "ratingNumber").observeSingleEvent(of: .value, with: {(reviewSnapshot) in
            if reviewSnapshot.exists(){
                if let values = reviewSnapshot.value as? [String:AnyObject]{
                    for reviews in values {
                        if let ratingNumber = reviews.value["ratingNumber"] as? String{

                            print("This is the ratingNumber list", ratingNumber)
                        }
                    }
                }
            }
        })

    })
}

}

1 个答案:

答案 0 :(得分:3)

在嵌套性中,以下内容成立:

  • 如果绑定到values成功,则类型为[String:AnyObject]
  • 每个reviews个实例都是(key: String, value: AnyObject)
  • 类型的命名元组
  • 当您尝试绑定到ratingNumber时,您访问value的{​​{1}}属性,并且就好像此reviews属性本身就是字典一样。但是,它不是,它是value类型。

最有可能的是,在上面的第三个项目中,存在逻辑错误,这反过来导致最内层的可选绑定失败。编译器无法知道AnyObject可访问的AnyObject实例是否实际上包裹了一个字典(可能是reviews.value?)。您可以尝试首先尝试将其类型转换为您认为的字典类型,然后尝试访问转换后的值的NSDictionary键。

可能(没有机会自己测试一下,因为你缺乏可重复的例子......):

"ratingNumber"