我正在尝试将下载URL(用于存储在firebase存储中的图像)保存在数据库中。我看过here和here,但是出现以下错误:
无法强制将'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
}
}
}
感谢您的帮助!
答案 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])