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

Swift如何将Firestore返回的Map数据映射为自定义Object对象数组

实现方案

你只需要在原有查询逻辑的基础上增加类型转换和结构体组装逻辑即可,核心使用compactMap做安全转换避免运行时崩溃,完整实现如下:

// 你定义的结构体
struct Object {
    var key: String
    var value: [String]
}

// Firestore查询回调逻辑
query.getDocuments { snapshot, error in
    guard let documents = snapshot?.documents else { return }
    // 取出所有文档的全部键值对
    let allKeyValuePairs = documents.flatMap({ $0.data() })
    // 转换为目标结构体数组
    let targetObjectArray = allKeyValuePairs.compactMap { key, value in
        // 安全转换value为[String]类型,类型不匹配的项会被自动过滤
        guard let stringValueList = value as? [String] else { return nil }
        return Object(key: key, value: stringValueList)
    }
    // 此处targetObjectArray就是你需要的[Object]类型结果
    print(targetObjectArray)
}

如果你的需求是按文档拆分,每个Firestore文档对应一个独立的[Object]数组,可使用如下逻辑:

query.getDocuments { snapshot, error in
    guard let documents = snapshot?.documents else { return }
    // 得到[[Object]]类型结果,每个子数组对应一个文档的内容
    let documentObjectList = documents.map { singleDocument in
        singleDocument.data().compactMap { key, value in
            guard let stringValueList = value as? [String] else { return nil }
            return Object(key: key, value: stringValueList)
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 02:54:07