使用未解决的标识符firebase函数

时间:2019-03-04 17:44:52

标签: swift firebase firebase-storage

我已经定义了sendDataToDatabase函数,但由于某种原因它无法解析photoUrl?

6个小时以来,我一直在尝试找出可能导致此问题的原因,并且似乎找不到解决方案,如果有人可以提供帮助,将不胜感激。

    @IBAction func shareButton_TouchUpInside(_ sender: Any) {
    ProgressHUD.show("Waiting...", interaction: false)
    if let profileImg = self.selectedImage, let imageData = profileImg.jpegData(compressionQuality: 0.1) {
        let photoId = NSUUID().uuidString
        let storageRef = Storage.storage().reference(forURL: "manifest-bit-233115.appspot.com").child("posts").child(photoId)
        storageRef.putData(imageData, metadata: nil, completion: { (metadata, Error) in
           if Error != nil {
                return
           }
            storageRef.downloadURL(completion: { (URL, Error) -> Void in
                if (Error != nil) {
                    //handle any errors
                } else {
                    //get download url
                    let photoUrl = URL?.absoluteString
                }
                self.sendDataToDatabase(photoUrl: photoUrl!)
        })
    }
)}

 func sendDataToDatabase(photoUrl: photoUrl!) {
     let ref = Database.database().reference()
     //let uid = Auth.auth().currentUser!.uid
     let postsRef = ref.child("posts")
     let newPostId = postsRef.childByAutoId().key
     let newPostRef = postsRef.child(newPostId!)

     newPostRef.setValue(["photoUrl": photoUrl])

 }

2 个答案:

答案 0 :(得分:1)

有很多问题。

您仅需在sendDataToDatabase分支中调用else,并以小写字母开头声明参数。
参数是不是类型。

storageRef.downloadURL(completion: { (url, error) -> Void in
   if let error = error {
      //handle any errors
   } else {
     //get download url
     let photoUrl = url!.absoluteString
     self.sendDataToDatabase(photoUrl: photoUrl)
   }
})

并且您必须在函数中声明类型

func sendDataToDatabase(photoUrl: String) { ...

答案 1 :(得分:0)

这行不通:

storageRef.downloadURL(completion: { (URL, Error) -> Void in
    if (Error != nil) {
        //handle any errors
    } else {
        //get download url
        let photoUrl = URL?.absoluteString
    }
    self.sendDataToDatabase(photoUrl: photoUrl!)
})

photoUrl仅在else子句中可用,因为这是定义的地方,因此您不能在该范围之外使用它。

另外,这个:

func sendDataToDatabase(photoUrl: photoUrl!)

应该是:

func sendDataToDatabase(photoUrl: String)

不命名变量URLError也是一个好主意,因为它们与URL和Error类相同。将它们分别命名为urlerror