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

Posted

技术标签:

【中文标题】Swift方法中的Firebase“找不到成员:值”【英文标题】:Firebase "Could not find member: Value" in Swift method 【发布时间】:2015-08-29 19:57:03 【问题描述】:

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

这里是sn-p的代码:

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

【问题讨论】:

如果你完全指定它会发生什么:FEventType.Value? @vacawama 发生完全相同的错误。我什至查看了 FEventType 的实现,Value 在那里 【参考方案1】:

该错误完全具有误导性。

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。添加return后,你会看到如下错误:

错误:无法将“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 应该可以。

【讨论】:

以上是关于Swift方法中的Firebase“找不到成员:值”的主要内容,如果未能解决你的问题,请参考以下文章

将firebase数据添加到ios swift中的数组

Swift中的FireBase电话号码验证错误

Firebase 中的观察者未在 swift 应用程序中调用

如何在 Swift 中保存实时 Firebase 数据库中的数据?

Firebase/Swift - 从 Firebase 输出数据出错

如何在 Swift 4 中更新 Firebase 身份验证中的电子邮件地址