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 应该可以。