SwiftUI 问答之list未在 SwiftUI 中显示来自 API 的数据?

实战需求

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

  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`!

解决方案

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

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

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

精品教程推荐


加入我们一起学习SwiftUI

QQ:3365059189
SwiftUI技术交流QQ群:518696470
教程网站:www.openswiftui.com

发表回复