问题描述
我试图使用Contentful CMS并遍历数据数组,以便可以在水平图块的“标题”,“样式”和“描述”组中显示它。我能够用硬编码的数据数组来做到这一点,但是我无法用它来做到这一点...
我已经包含了我的View,View Model和Model,因为您会看到该模型包含我的API调用,我的View Model只处理我的可识别数据,然后View自己处理视图。
// MARK: - View
struct BeerListView: View {
@Observedobject var draftVM = BeerModel()
var body: some View {
vstack {
ForEach(draftVM.draftBeerArray.indices,id: \.self) { item in
vstack {
Text(item.title)
Text(item.style)
Text(item.description)
}
}
}
}
}
// MARK: - View Model
struct BeersData: Identifiable {
var id = UUID()
var title: String = ""
var style: String = ""
var description: String = ""
}
// MARK: - Model
private let client = Client(spaceId: "SPACEID",accesstoken: "SUPERSECRETTOKEN")
func getArray(id: String,completion: @escaping ([Entry]) -> ()) {
let query = Query.where(contentTypeId: id)
client.fetchArray(of: Entry.self,matching: query) { result in
switch result {
case .success( let array):
dispatchQueue.main.async {
completion(array.items)
print(result)
}
case.failure(let error):
print(error)
}
}
}
class BeerModel: ObservableObject {
@Published var draftBeerArray: [BeersData] = beerArray
init() {
getArray(id: "beers") { (items) in
items.forEach { (items) in
self.draftBeerArray.append(BeersData (
title: items.fields["title"] as! String,style: items.fields["style"] as! String,description: items.fields["description"] as! String))
}
}
}
}
解决方法
如果按索引进行迭代,则闭包参数为index,因此您必须按索引访问数组,例如
ForEach(draftVM.draftBeerArray.indices,id: \.self) { index in
VStack {
Text(draftVM.draftBeerArray[index].title)
如果要访问项目,则必须按项目进行迭代(它们已经可以识别)
ForEach(draftVM.draftBeerArray,id: \.self) { item in
VStack {
Text(item.title)