swift - storageRef.downloadURL 没有在里面执行代码
问题描述
func uploadProfileImage(_ image:UIImage, completion: @escaping ((_ url:URL?)->())) {
guard let uid = Auth.auth().currentUser?.uid else { return }
let storageRef = Storage.storage().reference().child("user/\(uid)")
let imageData = image.jpegData(compressionQuality: 0.75)
let metaData = StorageMetadata()
metaData.contentType = "image/jpg"
storageRef.putData(imageData!, metadata: metaData)
//Get url
let imageRef = storageRef
imageRef.downloadURL { url, error in
if let error = error {
print(error.localizedDescription)
}else{
print(url.absoluteString)
}
}
}
里面的代码不会执行,它会跳过所有内容,就像没有存储代码一样。我不确定完成是如何工作的,但我想它会打印错误或打印 url,但两者都不会。当我在这里设置断点时,它甚至不会检查是否错误 = 错误。是我做错了什么还是其他人有同样的问题?
imageRef.downloadURL { url, error in
if let error = error {
print(error.localizedDescription)
}else{
print(url.absoluteString)
}
}
解决方案
您的 API 调用是异步的,因此为什么您需要而不是 print 实际上使用完成块来返回结果(错误或值)。
推荐阅读
- ios - Xcode 9.2 无法启动:加载插件失败
- javascript - 仅在 WordPress 评论中出现短代码的地方加载 javascript
- c++ - fstream 删除特定的开始到结束行
- excel - Excel VBA 变量图表范围
- javascript - 无法呈现值数组(React 组件)
- c# - 为什么 ref 结构不能用作类型参数?
- c# - 如何使两个任务在 CPU 时间分布均匀的情况下运行
- c++ - 在分配中使用 initializer_list 是最佳实践吗
- mysql - 如何在一个 SQL 语句中使用 Substring 和 Replace?
- c# - NumericUpDown:修复 MouseEnter 和 MouseLeave 事件