Таким образом, для второго последнего блока (newImageRef.putData) я могу определить downloadURL как String?, Но затем я получаю ошибку __SwiftValue в последнем блоке (newImageRef.putData1).
И даже определяя downloadURL как строка кажется опасной, потому что, глядя на документацию https://firebase.google.com/docs/reference/swift/firebasestorage/api/reference/Classes/StorageMetadata, она, кажется, используется в качестве интегрального URL-адреса функции.
Кроме этих ошибок терминала, есть желтая ошибка, которая предупреждает Значение downloadURL было определено, но никогда не использовалось; рассмотрите возможность замены логическим тестом
func save() {
let uid = Auth.auth().currentUser!.uid
let newPostRef = Database.database().reference().child("people").child(uid).child("PhotoPosts")
let newPostRef1 = Database.database().reference().child("people").child(uid).child("PhotoPosts1")
let newPostKey = newPostRef.key
if let imageData = image.jpegData(compressionQuality: 0.001){
let imageStorageRef = Storage.storage().reference().child("images").child(uid)
let newImageRef = imageStorageRef.child(newPostRef.key!)
let newImageRef1 = imageStorageRef.child(newPostRef1.key!)
newImageRef.putData(imageData).observe(.success, handler: {(snapshot) in
newImageRef.downloadURL { (url, error) in
guard let downloadURL = url else {
return
}
newPostRef.setValue(url)
}
})
newImageRef1.putData(imageData).observe(.success, handler: {(snapshot) in
newImageRef1.downloadURL { (url, error) in
guard let downloadURL = url else {
return
}
let keyToPost = Database.database().reference().child("people").child(uid).childByAutoId().key ?? "I am a default value"
let f1: [String: Any] = [(keyToPost) : newImageRef1.downloadURL as Any]
newPostRef1.updateChildValues(f1)
}
})
Ниже приведено то, что у меня было раньше, но изменилось из-за обновлений модуля
newImageRef.putData(imageData).observe(.success, handler: {(snapshot) in
self.imageDownloadURL = snapshot.metadata?.downloadURL()?.absoluteString
newPostRef.setValue(self.imageDownloadURL as Any)
})