我有一个来自云Firestore的数据的compactmap,但是我只需要访问其中一个变量并迭代它以添加存储在那里的整数。我的数据包含日期并且不符合序列,我正在努力寻找解决方案
我的数据:
struct Travel: Identifiable, Equatable, Codable {
var id = UUID()
var reason: String
var date: Date
var numDays: Int
Firestore获取:
func fetchData() async throws -> [Travel] {
guard let uid = Auth.auth().currentUser?.uid else { return [] }
let snapshot = try await reference1.document(uid).collection("dates")
.order(by: "date", descending: true)
.getDocuments()
return snapshot.documents.compactMap { document in
try! document.data(as: Travel.self)
}
}
我需要一种方法来访问numDays数据,并将所有保存的数据的所有值加在一起。
我已经尝试过for循环,但由于Travel不符合Sequence,因此无法执行此操作。
然后我有了viewModel:
@Published var travel: Loadable<[Travel]> = .loading
func fetchPosts() {
Task {
do {
travel = .loaded(try await datesRepository.fetchData())
} catch {
print("[ViewModel] Cannot fetch posts: \(error)")
travel = .error(error)
}
}
}
任何对该数据执行for循环的尝试都不起作用。请帮帮忙
2条答案
按热度按时间ar7v8xwq1#
如果我对问题的理解是正确的,你想得到一个
Travel
对象的数组,取出numDays
的值,然后把它们加在一起?如果是这样,可以使用.reduce
。这意味着“获取数组并从0开始执行reduce,将每个
Travel
对象的numDays
值添加到reduce中的运行总和并返回总和。esbemjvw2#
您可以创建一个函数,将其传入Travel对象的数组,并使用.reduce方法对天数求和,并根据需要返回它。就像这样: