Значение типа «StorageMetadata» не имеет члена «downloadURL» в swift и firebase - PullRequest
0 голосов
/ 29 апреля 2020

Я сейчас смотрю видео на YouTube, рассказывающее, как сделать приложение для социальных сетей. Но когда я писал код, я столкнулся с ошибкой в ​​этой функции. Это очень раздражающая ошибка, поэтому, если вы можете, пожалуйста, помогите мне

func setupUser(userUid: String) {
    if let imageData = self.userImgView.image!.jpegData(compressionQuality: 0.2) {
        let imgUid = NSUUID().uuidString
        let metaData = StorageMetadata()
        Storage.storage().reference().child(imgUid).putData(imageData, metadata: metaData) { (metadata, error) in

            let downloadURL = metadata?.downloadURL()?.absoluteString

            let userData = [
                "username": self.usernameField.text!,
                "userImg": downloadURL!
                ] as [String : Any]

            Database.database().reference().child("users").child(userUid).setValue(userData)
            self.performSegue(withIdentifier: "toFeed", sender: nil)
        }
    }
}

Ошибка произошла в этом коде ...

 let downloadURL = metadata?.downloadURL()?.absoluteString

Есть и другие вопросы о Stackoverflow, как это один, но я попробовал все из них, но получил ошибку. Не могли бы вы мне помочь. Вы можете просто немного отредактировать мой код, чтобы исправить это? Пожалуйста, не ведите меня прямо к документации. Я пробовал это, но это не сработало

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Правильная вещь для понижения подфайла. В вашем подфайле наберите

pod 'Firebase/Storage', '4.4.0'

Тогда все заработает. Вам не нужно понижать рейтинг других подфайлов.

0 голосов
/ 29 апреля 2020

Вы можете использовать эту функцию для загрузки контента в хранилище Firebase

typealias blockCompletedWith = (Bool, String) -> Void 

func uploadToFirebaseStorage(data: Data, path: String, blockCompletedWith: @escaping blockCompletedWith) {
    let metadata = StorageMetadata()
    metadata.contentType = "image/jpeg" //Modify as per your need

    let store = Storage.storage()
    let storeRef = store.reference().child(path)
    let _ = storeRef.putData(data, metadata: metadata) { (metadata, error) in
        guard let _ = metadata else {
            print("error occured: \(error.debugDescription)")
            blockCompletedWith(false, "")
            return
        }

        storeRef.downloadURL(completion: { (url, error) in
            if let urlText = url?.absoluteString {
                blockCompletedWith(true, urlText)
            }
            else {
                blockCompletedWith(false, "")
            }
        })
    }
}

После получения URL-адреса из этой функции вы можете выполнять дальнейшую обработку данных в соответствии с вашими потребностями.

Пожалуйста, дайте мне знать, если у вас есть какие-либо вопросы.

Рад помочь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...