在PreviewProvider中模拟EvironmentObject

时间:2019-06-09 10:37:00

标签: swift swiftui

我正在使用使用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
    }
}

1 个答案:

答案 0 :(得分:0)

在我的ListData类中,它工作正常:

#if DEBUG

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

#endif