在 PreviewProvider 中模拟环境对象

问题描述 投票:0回答:1

我正在使用 EnvironmentObject 作为我的数据源来使用 SwiftUI。我想知道在使用 PreviewProvider 时如何模拟它。

示例代码如下:

struct ListView: View {
    @State private var query: String = "Swift"
    @EnvironmentObject var listData: ListData

    var body: some View {
        NavigationView {
            List(listData.items) { item in
                ListItemCell(item: item)
            }
        }.onAppear(perform: fetch)
    }

    private func fetch() {
        listData.fetch()
    }
}

struct ListView_Previews: PreviewProvider {
    static var previews: some View {
        How do I mock this?
        // ListView(listData: EnvironmentObject<ListData>)
    }
}

class ListData: BindableObject {
    var items: [ListItem] = [] {
        didSet {
            didChange.send(self)
        }
    }

    var didChange = PassthroughSubject<ListData, Never>()

    func fetch() {
        // async call that updates my items
        self?.items = someNetworkResponse
    }
}
swift swiftui
1个回答
1
投票

这在我的 ListData 类中运行良好:

#if DEBUG

let mockedListView = ListView().environmentObject(ListData())

#endif
© www.soinside.com 2019 - 2024. All rights reserved.