【问题标题】:Use of Unresolved Identifier firebase function使用未解析的标识符 firebase 功能
【发布时间】:2019-03-04 17:44:52
【问题描述】:

我已经定义了函数 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])

 }

【问题讨论】:

    标签: swift firebase firebase-storage


    【解决方案1】:

    有很多问题。

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

    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) { ...
    

    【讨论】:

    • 我的目标是在完成上传到firebase后将照片/视频的下载网址放在数据库中,这是我能找到的唯一解决方案,你知道更有效的方法吗?作为首选方法 metadata?.downloadURL()?.absoluteString 不再起作用。
    • 那是另一个问题,我对 FireBase 不熟悉
    【解决方案2】:

    这行不通:

    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

    【讨论】:

      猜你喜欢
      • 2018-09-21
      • 1970-01-01
      • 2017-06-29
      • 2016-10-03
      • 2018-11-18
      • 2018-03-12
      • 1970-01-01
      相关资源
      最近更新 更多