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

SwiftUI List渲染需指定数组下标才能显示内容,该如何解决?

问题根因

你要遍历的书签列表实际存储在接口返回的ObjectResponse对象的objects属性中,但你目前把整个ObjectResponse包装成单元素数组存入了ViewModel的items中,导致List遍历的层级错误,必须手动加下标才能拿到单个书签数据。

修改方案

1. 调整ViewModel代码

把存储的数组类型改为你实际需要遍历的[Object],请求成功后直接把响应里的objects数组赋值即可:

class ContentViewModel: ObservableObject {
    // 存储实际要渲染的书签数组,类型为[Object]
    @Published var items: [Object] = []
    func fetchData() {
        let api = "https://api.cosmicjs.com/v2/buckets/a5e294b0-55ee-11ec-942e-ef0a04148eb7/objects?pretty=true&query=%7B%22type%22%3A%22bookmarks%22%7D&read_key=fufvo5ceSy1W88afkchDIRjYrUIzErPw9YzcW2vQV1SxKqjNHo&limit=20&props=slug,title,content,metadata,"
        
        guard let url = URL(string: api) else { return }
        
        URLSession.shared.dataTask(with: url) { (data, response, error) in
            do {
                if let data = data {
                    let result = try JSONDecoder().decode(ObjectResponse.self, from: data)
                    DispatchQueue.main.async {
                        // 直接把响应里的书签数组赋值给items
                        self.items = result.objects
                    }
                } else {
                    print("No data")
                }
            } catch (let error) {
                print(error)
            }
        }.resume()
    }
}

2. 调整ContentView代码

现在List遍历的就是所有书签对象,直接取对应属性即可,不需要加下标:

struct ContentView: View {
    @ObservedObject var viewModel = ContentViewModel()
    
    var body: some View {
        NavigationView {
            List(viewModel.items, id: \.self) { item in
                VStack(alignment: .leading) {
                    Text(item.title)
                    // 还可以直接取其他属性,比如发布时间
                    Text(item.metadata.published)
                        .font(.caption)
                        .foregroundColor(.gray)
                }
            }
            .navigationTitle("Bookmarks")
        }
        .onAppear(perform: {
            viewModel.fetchData()
        })
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:36:02