未解决的标识符“完成”

时间:2019-03-25 15:55:34

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

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

我已经尝试在调用本身中添加完成块,并通读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)
            }
    })
}

2 个答案:

答案 0 :(得分: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)
            }
    })
}

答案 1 :(得分:0)

您必须在方法中将完成声明为参数 然后指定完成内容的数据类型。

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