Получение ошибки «Переменная, используемая внутри собственного начального значения» - PullRequest
0 голосов
/ 22 января 2020

Я пишу новый фрагмент кода, который позволяет пользователю загружать изображение в сообщение, которое будет сохранено в базе данных и хранилище Firebase. Затем он будет показан в UITableView на отдельном Viewcontroller. В части кода, где я хочу сохранить URL-адрес фотографии в моей базе данных, я получаю сообщение об ошибке «Переменная используется в пределах своего исходного значения». Я посмотрел на другие темы, освещающие эту проблему, и, следуя их советам, я получаю новый набор ошибок. Вот как выглядит мой код и где я получаю сообщение об ошибке. Если есть какие-либо предложения, которые были бы замечательно, спасибо! Вот код:

func postWithImageAndText() {

    var imagesArray = [AnyObject]()

    let postLength = textView.text.count
    let numImages = imagesArray.count
    let postRef = Database.database().reference().child("posts").childByAutoId()
    let storageRef = Storage.storage().reference()
    let uid = Auth.auth().currentUser
    let pictureStorageRef = storageRef.child("users/profile/\(uid)/media")

    let lowResImageData = (imagesArray[0] as! UIImage).jpegData(compressionQuality: 0.50)

            if(postLength>0 && numImages>0)
            {
                let uploadTask = pictureStorageRef.putData(lowResImageData!,metadata: nil)

                {metadata,error in

                    if (error == nil) {
                    let downloadUrl = storageRef.downloadURL { (url, error) in

                        guard let userProfile = UserService.currentUserProfile else { return }

                        let childUpdates = [
                            "author": [
                                "uid": userProfile.uid,
                                "username": userProfile.fullname,
                                "photoURL": userProfile.photoURL.absoluteString
                            ],
                            "text": self.textView.text!,
                            "picture": downloadUrl!.absoluteString,
                            "timestamp": ["sv.":"timestamp"]
                        ] as [String:Any]
                    }
                }
            }
        }
}

`

Ошибка происходит в этой части: "picture": downloadUrl!.absoluteString,

Ответы [ 2 ]

1 голос
/ 23 января 2020

Ваш обновленный код:

func postWithImageAndText() {

    var imagesArray = [AnyObject]()

    let postLength = textView.text.count
    let numImages = imagesArray.count
    let postRef = Database.database().reference().child("posts").childByAutoId()
    let storageRef = Storage.storage().reference()
    let uid = Auth.auth().currentUser
    let pictureStorageRef = storageRef.child("users/profile/\(uid)/media")

    if let lowResImageData = (imagesArray[0] as! UIImage).jpegData(compressionQuality: 0.50) {

      if(postLength>0 && numImages>0)
            {
               pictureStorageRef.putData(lowResImageData, metadata: metaData) { (metadata, error) in

                if error != nil {

                    print("Failed to upload image:", error as Any)

                }

                pictureStorageRef.downloadURL(completion: { (url, error) in

                    if error != nil {

                        print(error!)
                    }
                    if let imageUrl = url?.absoluteString {

                        guard let userProfile = UserService.currentUserProfile else { return }

                        let childUpdates = [
                            "author": [
                                "uid": userProfile.uid,
                                "username": userProfile.fullname,
                                "photoURL": userProfile.photoURL.absoluteString
                            ],
                            "text": self.textView.text!,
                            "picture": imageUrl,
                            "timestamp": ["sv.":"timestamp"]
                        ] as [String:Any]

                    }

                })

         }
      }
   }
}
1 голос
/ 23 января 2020

Как я вижу, вы получили ошибку «Используемая переменная в своем собственном начальном значении», это означает, что вы пытаетесь получить доступ к начальному значению переменной в этой переменной, это не очень хорошее поведение. Я также вижу, что вы не используете никаких данных из вашего блока завершения, поэтому попробуйте использовать nil вместо блока завершения, а затем попытайтесь получить доступ к вашей downloadURL переменной

...