首页 > 解决方案 > 列表未在 SwiftUI 中显示来自 API 的数据?

问题描述

我正在尝试从 API 获取数据并希望在 List 中显示。

  List {
                ForEach(0 ..< (declarationViewModel.items?.count)!) { index in

                    HStack {
......

但由于从 API 获取数据需要一些时间,因此最初数据为 0,因此无法在列表中显示数据,因为它在获取数据后没有重新加载。

public class DeclarationViewModel: ObservableObject {

    @Published var items: [Item]?
    @Published var title: String?

    init() {
        self.items = [Item]()
        self.title = ""
    }

    init(items: [Item]?, title: String) {
        self.items = items
        self.title = title
    }
}

错误日志

forEach<Range<Int>, Int, HStack<TupleView<(HStack<TupleView<(ModifiedContent<ModifiedContent<Image, _EnvironmentKeyWritingModifier<Optional<Color>>>, _FrameLayout>, Text, Spacer)>>, Spacer, _ConditionalContent<ModifiedContent<ModifiedContent<Image, _EnvironmentKeyWritingModifier<Optional<Color>>>, _FrameLayout>, ModifiedContent<ModifiedContent<Image, _EnvironmentKeyWritingModifier<Optional<Color>>>, _FrameLayout>>, _ConditionalContent<ModifiedContent<ModifiedContent<Image, _EnvironmentKeyWritingModifier<Optional<Color>>>, _FrameLayout>, ModifiedContent<ModifiedContent<Image, _EnvironmentKeyWritingModifier<Optional<Color>>>, _FrameLayout>>)>>> count (14) != its initial count (0). `ForEach(_:content:)` should only be used for *constant* data. Instead conform data to `Identifiable` or use `ForEach(_:id:content:)` and provide an explicit `id`!

标签: iosswiftswiftui

解决方案


你可以尝试这样简单的事情:

编辑:如果你的物品是可识别的,那么删除“id:.\self”,什么都没有。

List {
    if let items = declarationViewModel.items {
        ForEach(items, id: \.self) { item in
            ....
        }
    }
}

推荐阅读