我在我的功能中设置了断点,一切运行正常,但是当涉及到打印部分时,它总是跳过它。
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)
}
}
}
}
})
})
}
}
答案 0 :(得分:3)
在嵌套性中,以下内容成立:
values
成功,则类型为[String:AnyObject]
reviews
个实例都是(key: String, value: AnyObject)
ratingNumber
时,您访问value
的{{1}}属性,并且就好像此reviews
属性本身就是字典一样。但是,它不是,它是value
类型。最有可能的是,在上面的第三个项目中,存在逻辑错误,这反过来导致最内层的可选绑定失败。编译器无法知道AnyObject
可访问的AnyObject
实例是否实际上包裹了一个字典(可能是reviews.value
?)。您可以尝试首先尝试将其类型转换为您认为的字典类型,然后尝试访问转换后的值的NSDictionary
键。
可能(没有机会自己测试一下,因为你缺乏可重复的例子......):
"ratingNumber"