我有一段代码,可用来从Firebase检索一些信息。但是,我不知道为什么它不认识它自己的枚举值。我在我的项目中调用.Value的其他任何地方都没有收到此错误,因此我不确定实用性在做什么。

这是代码片段:

func getTimerInformation() {
    let timerRef = firebaseRef.childByAppendingPath("currentEvent").childByAppendingPath("stopTime")
        timerRef.observeSingleEventOfType(.Value, withBlock: { (snapshot) in
            self.dm.eventEndTime = snapshot.value
        })
}

ios - Swift方法中的Firebase“找不到成员:值”-LMLPHP

最佳答案

该错误是完全误导的。

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/

10-12 00:32
查看更多