Firebase“无法在Swift方法中找到成员:值”

时间:2015-08-29 19:57:04

标签: ios swift firebase

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

以下是代码段:

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

enter image description here

1 个答案:

答案 0 :(得分:3)

错误完全是误导。

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”的值分配给type值   '字符串'

无论该类型是什么,您都需要将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应该有效。