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

SwiftUI结合Firebase获取ViewModel时遇表达式歧义错误求助

解决Firestore中“Type of expression is ambiguous without more context”错误

这个错误是Swift编译器类型推断模糊导致的,虽不影响构建,但可通过以下方式修复:

方案1:简化闭包参数类型声明

移除闭包中冗余的参数类型标注,让Swift自动推断Firestore回调的类型:

func getStories() {
    db.collection("GBnews").addSnapshotListener { querySnapshot, error in
        
        if let error = error {
            print("Error fetching news stories: \(error.localizedDescription)")
            return
        }

        guard let documents = querySnapshot?.documents else {
                print("No Documents")
                return
            }

        self.stories = documents.compactMap { queryDocumentSnapshot in
             return try? queryDocumentSnapshot.data(as: Stories.self)
         }

        self.stories.sort { $0.date > $1.date }
    }
}

方案2:明确指定完整类型路径

若需保留类型标注,使用完整模块路径避免类型冲突:

import FirebaseFirestore

// ...

func getStories() {
    db.collection("GBnews").addSnapshotListener { (querySnapshot: FirebaseFirestore.QuerySnapshot?, error: Error?) in
        // 内部代码保持不变
    }
}

方案3:检查Stories模型的Codable实现

确保Stories结构体/类正确遵守Codable协议(queryDocumentSnapshot.data(as:)方法依赖此协议):

struct Stories: Codable {
    var date: Date
    // 根据Firestore文档结构定义其他属性
    // 可选:添加id字段以适配文档ID:var id: String?
}

额外检查

  • 确认已正确导入FirebaseFirestore模块
  • 排查项目中是否存在与QuerySnapshot或Error同名的自定义类型,避免命名冲突
  • 尝试更新Firebase SDK到最新版本,修复潜在的类型推断问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 10:37:50