我有一段代码,可用来从Firebase检索一些信息。但是,我不知道为什么它不认识它自己的枚举值。我在我的项目中调用.Value
的其他任何地方都没有收到此错误,因此我不确定实用性在做什么。
这是代码片段:
func getTimerInformation() {
let timerRef = firebaseRef.childByAppendingPath("currentEvent").childByAppendingPath("stopTime")
timerRef.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
self.dm.eventEndTime = snapshot.value
})
}
最佳答案
该错误是完全误导的。
1行长的Swift闭包返回该行的值。 Swift期望闭包返回void
,因此您的闭包与observeSingleEventOfType
中期望的闭包不匹配。那时的Swift非常令人困惑,因此它不知道如何处理.Value
,因为它不确定所调用函数的签名是什么。如果在闭包中添加明确的return
行,则闭包将与期望的签名匹配,并且您将发现真正的错误是:
func getTimerInformation() {
let timerRef = firebaseRef.childByAppendingPath("currentEvent").childByAppendingPath("stopTime")
timerRef.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
self.dm.eventEndTime = snapshot.value
return
})
}
我认为问题在于您的任务。
snapshot.value
的类型为AnyObject
。添加退货后,您将看到类似以下的错误:错误:无法将类型“AnyObject”的值分配给类型的值
'串'
无论该类型是什么,您都需要将
snapshot.value
转换为该类型。如果dm.eventTime
确实是String
,则:func getTimerInformation() {
let timerRef = firebaseRef.childByAppendingPath("currentEvent").childByAppendingPath("stopTime")
timerRef.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
self.dm.eventEndTime = snapshot.value as! String
return
})
}
如果您需要一个数字,那么
snapshot.value.doubleValue
应该可以使用。关于ios - Swift方法中的Firebase“找不到成员:值”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32290151/