【问题标题】:Error code "Cannot assign value of type 'Void"错误代码“无法分配“无效”类型的值
【发布时间】:2018-08-30 20:44:13
【问题描述】:
此代码无法访问 firebase 数据库中的照片。我得到的错误是“无法分配'Void'类型的值?'输入“字符串!””
self.fileURL = metadata?.storageReference?.downloadURL(completion: error as! (URL?, Error?) -> Void)
let changeRequestPhoto = user?.user.createProfileChangeRequest()
changeRequestPhoto?.photoURL = NSURL(string: self.fileURL)! as URL
changeRequestPhoto?.commitChanges(completion: {(error) in
if let error = error {
print (error.localizedDescription)
return
}
else {
print ("Sweet!")
}
})
【问题讨论】:
标签:
ios
swift
firebase
firebase-storage
【解决方案1】:
错误提示downloadURL 没有返回值。它使用完成处理程序从异步任务中返回数据
我不熟悉 Firebase,但 API 的语法似乎是
metadata?.storageReference?.downloadURL( completion: { (url, error) in
let changeRequestPhoto = user?.user.createProfileChangeRequest()
changeRequestPhoto?.photoURL = url
changeRequestPhoto?.commitChanges(completion: { error in
if let error = error {
print (error.localizedDescription)
return
}
else {
print ("Sweet!")
}
})
})
【解决方案2】:
在第一行,我假设self.fileURL 是您引用的String,但您正试图将metadata?.storageReference?.downloadURL 的输出分配给它,它返回Void。
您需要从完成块中获取url,如下所示。注意,这个例子直接取自Firebase's documentation
starsRef.downloadURL { url, error in
if let error = error {
// Handle any errors
} else {
// Get the download URL for 'images/stars.jpg'
}
}
【解决方案3】:
您需要为第一行添加适当的完成处理
self.fileURL = metadata?.storageReference?.downloadURL(completion: { (url, error) in
if (error == nil) {
//do something with the url
} else {
// error handling
}
})