【问题标题】:Swift 4: Variable 'value' inferred to have type 'Void', which may be unexpected?Swift 4:变量“值”推断为“无效”类型,这可能是意外的?
【发布时间】:2019-01-30 07:16:39
【问题描述】:

我正在尝试将存储在 Firebase 存储中的图像的下载 URL 保存在数据库中。我查看了herehere,但出现以下错误:

无法将类型“Void”的值强制转换为类型“[String : String]”

这发生在下面指示的行:

storageRef.downloadURL { (url, error) in
    guard let downloadURL = url else {
        // Uh-oh, an error occurred!
        return
    }
    //database integration
let ref = Database.database().reference()
let usersRef = ref.child("usersPosts")

let uid = Auth.auth().currentUser?.uid
let newUserRef = usersRef.child(uid!).child("post\(takePicViewController().finalPost + PhotoArray.sharedInstance.numberPost)")

PhotoArray().dowloadImgUrls.append(("\(downloadURL)"))
let downloadUrlArray = PhotoArray().dowloadImgUrls
var value = newUserRef.setValue(["Image\(self.number)": "\(downloadUrlArray)"])// WARNING IS HERE

addImageURLToDatabase(uid: uid!, values: value as [String : String]) // ERROR IS HERE

在我将在下面列出以供参考的这一行(尽管上面也指出)正在收到警告,也在下面找到。

var value = newUserRef.setValue(["Image\(self.number)": "\(downloadUrlArray)"])

变量“值”推断为“Void”类型,这可能是意外的

编辑:我忘记包含被调用的函数:

    func addImageURLToDatabase(uid:String, values:[String:String]) {
    let ref = Database.database().reference()
    let usersReference = ref.child("usersPosts").child((Auth.auth().currentUser?.uid)!)

    usersReference.updateChildValues(values) { (error, ref) in
        if (error != nil) {
            print(error)
            return
        }
    }

}

感谢您的帮助!

【问题讨论】:

    标签: ios iphone swift firebase firebase-realtime-database


    【解决方案1】:

    这是因为函数newUserRef.setValue(...) 不返回任何内容。将您的代码更改为:

    let value = ["Image\(self.number)": "\(downloadUrlArray)"]
    newUserRef.setValue(value)
    addImageURLToDatabase(uid: uid!, values: value)
    

    【讨论】:

    • 我能够摆脱错误但是当我运行代码时,我在数据库中看到了这个:Image0:“”,我打算尝试做一些事情,让价值= ["Image(self.number)": "(downloadUrlArray[takePicViewController().numberPost])"] 但我收到一条错误消息,提示我不能用 Int 为 String 下标。我这样做对吗?如果是这样,我该如何解决。如果不是,我应该改变什么?
    • downloadUrlArray 变量是什么类型?你可以按住Option并点击变量名吗?
    • var dowloadImgUrls = [String]() 我运行了它,但这次它只是在发送数据后崩溃了,不是在我按下的时候而是在几秒钟后(20)。并且数据库没有添加任何新值。
    • 请使用新代码打开一个新问题,并说明您遇到的问题以及崩溃的行。
    【解决方案2】:

    newUserRef.setValue 的调用不返回值,它只是存储它。

    看来这是你想要的:

    var value = ["Image\(self.number)": "\(downloadUrlArray)"]
    newUserRef.setValue(value)
    
    addImageURLToDatabase(uid: uid!, values: value as [String : String]) 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多