【问题标题】:Getting error "Variable used within its own initial value"收到错误“变量在其自己的初始值内使用”
【发布时间】:2020-05-09 02:26:33
【问题描述】:

我正在编写一段新代码,允许用户将图像上传到将保存在 Firebase 数据库和存储中的帖子。然后它将显示在单独的 Viewcontroller 上的 UITableView 中。在我想将照片 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,

【问题讨论】:

  • 邮政编码作为文本,而不是作为图像。您可以写评论,例如指出任何错误等。请更新问题。
  • 哪一行出现错误?是不是让downloadUrl ...。您能否发布代码,而不是图像,以便可以测试花括号是如何平衡的。可以推断闭包的返回类型 { metadata, error in ... 还是需要显式 { (metadata, error) -> SomeType in ...
  • @JoakimDanielson 代码已按要求发布。
  • 在你得到错误的闭包中你有一个参数url,也许你应该使用这个参数而不是downloadUrl

标签: swift xcode firebase-realtime-database error-handling


【解决方案1】:

正如我所见,您收到“在其自己的初始值中使用的变量”错误,这意味着您尝试访问此变量中变量的初始值,这不是一个好的行为。 我还看到您没有使用完成块中的任何数据,因此请尝试使用 nil 而不是完成块,然后尝试访问您的 downloadURL 变量

【讨论】:

    【解决方案2】:

    您更新的代码:

    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]
    
                        }
    
                    })
    
             }
          }
       }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-12
      • 1970-01-01
      相关资源
      最近更新 更多