В настоящее время я использую комбинацию аутентификации, базы данных и хранилища Firebase для моего процесса подписки.
@objc func handleSignUp() {
guard let email = emailTextField.text else { return }
guard let password = passwordTextField.text else { return }
guard let fullName = fullNameTextField.text else { return }
guard let username = usernameTextField.text else { return }
Auth.auth().createUser(withEmail: email, password: password) { (user, error) in
//handle error
if let error = error {
print("Failed to create user with error", error.localizedDescription)
return
}
//set profile image
guard let profileImage = self.plusPhotoButton.imageView?.image else { return }
//upload data
guard let uploadData = profileImage.jpegData(compressionQuality: 0.3) else { return }
//place image in firbase storage
let filename = NSUUID().uuidString
let storage = Storage.storage()
let storageReference = storage.reference()
let imagesReference = storageReference.child("profile_images")
let uploadReference = imagesReference.child(filename)
uploadReference.putData(uploadData, metadata: nil) { (metadata, error) in
//handle error
if let error = error {
print("Failed to upload image to Firebase Storage with error", error.localizedDescription)
}
//profile image url
let profileImageURL = uploadReference.downloadURL
//user id
let uid = user?.user.uid
let dictionaryValues = ["name": fullName, "username": username, "profileImageURL": profileImageURL]
let values = [uid: dictionaryValues]
//save user info to database
Database.database().reference().child("users").updateChildValues(values) { (error, ref) in
print("Successfully created user and saved information to database")
}
}
}
Это должен быть код, который должен работать нормально. Однако xCode выдает мне эту ошибку:
Литерал гетерогенной коллекции может быть выведен только как '[String: Any]';добавить явную аннотацию типа, если это преднамеренно
и советует мне изменить
let dictionaryValues = ["name": fullName, "username": username, "profileImageURL": profileImageURL]
на
let dictionaryValues = ["name": fullName, "username": username, "profileImageURL": profileImageURL] as [String : Any]
В результате я могу скомпилировать изапустить проект.
Однако, когда я нажимаю кнопку регистрации и, следовательно, запускаю данную функцию, консоль показывает эту ошибку:
2019-09-30 19: 15: 13.049986+0200 5iveli0ns [965: 28839] [] nw_connection_receive_internal_block_invoke [C2] Не удалось получить ответ с ошибкой «Операция отменена»
, и в конце я получаю исключение времени выполнения:
*** Завершение работы приложения из-за необработанного исключения «InvalidFirebaseData», причина: «(updateChildValues: withCompletionBlock :) Не удается сохранить объект типа __SwiftValue в profileImageURL. Может хранить только объекты типа NSNumber, NSString, NSDictionary и NSArray. '
Это проблема, связанная с xCode 11 / Firebase 5.xx?