Swift 方法中的 Firebase "Could not find member: Value"
Firebase "Could not find member: Value" in Swift method
我有一段代码用于从 Firebase 检索一些信息。但是,我不知道为什么它不承认它自己的枚举值。在我调用 .Value
的项目中的其他任何地方都没有出现此错误,所以我不确定我在实用方面做错了什么。
这是代码片段:
func getTimerInformation() {
let timerRef = firebaseRef.childByAppendingPath("currentEvent").childByAppendingPath("stopTime")
timerRef.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
self.dm.eventEndTime = snapshot.value
})
}
这个错误完全是误导。
Swift 1 行长的闭包 return 该行的值。 Swift 期望闭包 return void
,因此您的闭包与它在 observeSingleEventOfType
中期望的闭包不匹配。 Swift 在那一点上非常混乱,所以它不知道如何处理 .Value
因为它不确定你正在调用的函数的签名是什么。如果你在闭包中添加一个明确的 return
行,那么你的闭包将匹配预期的签名,你会发现你的 real 错误是:
func getTimerInformation() {
let timerRef = firebaseRef.childByAppendingPath("currentEvent").childByAppendingPath("stopTime")
timerRef.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
self.dm.eventEndTime = snapshot.value
return
})
}
我认为问题出在您的作业上。 snapshot.value
属于 AnyObject
类型。添加 return 后,您将看到如下错误:
error: cannot assign a value of type 'AnyObject' to a value of type
'String'
无论哪种类型,您都需要将 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
应该可以。
我有一段代码用于从 Firebase 检索一些信息。但是,我不知道为什么它不承认它自己的枚举值。在我调用 .Value
的项目中的其他任何地方都没有出现此错误,所以我不确定我在实用方面做错了什么。
这是代码片段:
func getTimerInformation() {
let timerRef = firebaseRef.childByAppendingPath("currentEvent").childByAppendingPath("stopTime")
timerRef.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
self.dm.eventEndTime = snapshot.value
})
}
这个错误完全是误导。
Swift 1 行长的闭包 return 该行的值。 Swift 期望闭包 return void
,因此您的闭包与它在 observeSingleEventOfType
中期望的闭包不匹配。 Swift 在那一点上非常混乱,所以它不知道如何处理 .Value
因为它不确定你正在调用的函数的签名是什么。如果你在闭包中添加一个明确的 return
行,那么你的闭包将匹配预期的签名,你会发现你的 real 错误是:
func getTimerInformation() {
let timerRef = firebaseRef.childByAppendingPath("currentEvent").childByAppendingPath("stopTime")
timerRef.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
self.dm.eventEndTime = snapshot.value
return
})
}
我认为问题出在您的作业上。 snapshot.value
属于 AnyObject
类型。添加 return 后,您将看到如下错误:
error: cannot assign a value of type 'AnyObject' to a value of type 'String'
无论哪种类型,您都需要将 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
应该可以。