Swift 4:变量“值”推断为类型为“无效”,这可能是意外的吗?

时间:2018-08-23 20:25:56

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

我正在尝试将下载URL(用于存储在firebase存储中的图像)保存在数据库中。我看过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)"])
  

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

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

    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
        }
    }

}

感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

那是因为函数newUserRef.setValue(...)不返回任何东西。将您的代码更改为此:

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

答案 1 :(得分:0)

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

看来这是您想要的:

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

addImageURLToDatabase(uid: uid!, values: value as [String : String])