【问题标题】:unresolved identifier "completion"未解析的标识符“完成”
【发布时间】:2019-03-25 15:55:34
【问题描述】:

我有一些我在项目其他地方使用过的代码,并对其进行了修改以获取用户数据,但是有一个错误提示完成是一个未解决的标识符,我无法找到解决方案。

我尝试向调用本身添加一个完成块,并通读 Firebase 文档以尝试找到一个解决方案,但似乎没有任何效果。

func observeCurrentUser() {
    guard let currentUser = Auth.auth().currentUser else {
        return
    }

    CURRENT_USERS_REF?.child(currentUser.uid).observeSingleEvent(of: .value, with: {
        snapshot in
            if let dict = snapshot.value as? [String: Any] {
                let user = User.transformUser(dict: dict)
                completion(user)
            }
    })
}

【问题讨论】:

    标签: swift firebase-realtime-database firebase-authentication


    【解决方案1】:

    您需要添加一个尾随闭包(完成),因为您当前的语句 completion(user) 表明您尚未添加它

    func observeCurrentUser(completion:@escaping((User?) -> ())) {
        guard let currentUser = Auth.auth().currentUser else {
            completion(nil)
            return
        }
    
        CURRENT_USERS_REF?.child(currentUser.uid).observeSingleEvent(of: .value, with: {
            snapshot in
                if let dict = snapshot.value as? [String: Any] {
                    let user = User.transformUser(dict: dict)
                    completion(user)
                }
        })
    }
    

    【讨论】:

      【解决方案2】:

      您必须将完成声明为方法的参数 然后指定补全内容的dataType。

      func observeCurrentUser(completion: @escaping (_ user: UserModel )->(Void)) {
          guard let currentUser = Auth.auth().currentUser else {
              return
          }
      
          CURRENT_USERS_REF?.child(currentUser.uid).observeSingleEvent(of: .value, with: { snapshot in
              if let dict = snapshot.value as? [String: Any] {
                  let user = User.transformUser(dict: dict)
                  completion(user)
              }
          })
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多