You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase获取特定用户数据异常:循环遍历子节点而非完整用户

问题分析与解决方案

你的问题核心在于错误地遍历了单个用户节点的子字段,而不是直接从用户节点本身提取数据。当你调用REF_USERS.child(userId)时,返回的快照已经是该用户的完整数据节点,它的children是这个用户的各个字段(如firstName、city等),所以循环遍历这些子节点时,每个user其实是单个字段的快照,自然找不到其他字段的值,导致生成的User对象都是空字段。

修正后的代码

// Get all data about a specific user
func getUserdata(userId: String, handler: @escaping (_ userdata: [User]) -> ()) {
    print("UserId")
    print(userId)
    var userArray = [User]()
    REF_USERS.child(userId).observeSingleEvent(of: .value) { (userdataSnapshot) in
        // 直接从用户节点快照提取数据,不需要遍历children
        let firstName = userdataSnapshot.childSnapshot(forPath: "firstName").value as? String ?? ""
        let lastName = userdataSnapshot.childSnapshot(forPath: "lastName").value as? String ?? ""
        let name = userdataSnapshot.childSnapshot(forPath: "name").value as? String ?? ""
        let city = userdataSnapshot.childSnapshot(forPath: "city").value as? String ?? ""
        let country = userdataSnapshot.childSnapshot(forPath: "country").value as? String ?? ""
        let profileImageURL = userdataSnapshot.childSnapshot(forPath: "profileImageURL").value as? String ?? ""
        let defaultHunt = userdataSnapshot.childSnapshot(forPath: "defaultHunt").value as? String ?? ""
        
        let user = User(userId: userId, firstName: firstName, lastName: lastName, name: name, city: city, country: country, profileImageURL: profileImageURL, defaultHunt: defaultHunt)
        userArray.append(user)
        
        handler(userArray)
    }
}

为什么原来的代码会出错?

从你的终端输出能看到,userdataSnapshot.children是9个单个字段的快照(比如Snap (city) Oslo),当你循环遍历这些快照时,每个user变量指向的是单个字段节点——比如第一个是city节点,你在它下面找firstName自然找不到,所以返回默认空字符串。

正确的做法是直接使用最外层的userdataSnapshot(也就是该用户的根节点),通过childSnapshot(forPath:)去获取各个字段的值,这样就能拿到正确的数据了。

另外,如果你希望代码更简洁,还可以用Firebase的value转成字典的方式:

if let userDict = userdataSnapshot.value as? [String: Any] {
    let firstName = userDict["firstName"] as? String ?? ""
    // 其他字段同理...
}

内容的提问来源于stack exchange,提问作者Chris_1983_Norway

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:09:09