如何从Firebase实时数据库中提取无对应键的拆分训练计划名称
解决方案
你要的拆分计划名称本身就是splits节点下所有子节点的键(Key),不需要额外配置专属字段,直接从你拉取到的splits节点快照中提取所有子节点的key即可,以下是iOS端Swift的实现代码:
import FirebaseDatabase import FirebaseAuth func fetchSplitPlanNames(completion: @escaping ([String]) -> Void) { // 1. 获取当前登录用户的splits节点引用 guard let userId = Auth.auth().currentUser?.uid else { completion([]) return } let splitsRef = Database.database().reference() .child(userId) .child("splits") // 2. 拉取splits节点快照并提取计划名称 splitsRef.observeSingleEvent(of: .value) { snapshot in guard snapshot.exists() else { completion([]) return } // 提取方式1:遍历快照子节点获取key var planNames = [String]() for child in snapshot.children.allObjects as? [DataSnapshot] ?? [] { planNames.append(child.key) } completion(planNames) // 提取方式2:转字典后直接取所有key(和方式1效果一致,二选一即可) // if let splitsDict = snapshot.value as? [String: Any] { // completion(Array(splitsDict.keys)) // } } }
逻辑说明
- 两种提取方式效果完全一致,示例场景下最终返回结果就是
["Test-Split", "Test-Split-2"] - 如果后续需要同步展示计划的额外属性(比如总训练天数、总动作数量),可以在遍历子节点的同时读取对应子节点的属性即可
内容的提问来源于stack exchange,提问作者Nick Mcmullan
相关产品推荐
相关产品推荐

