我应该在哪里分配视图中的变量 - SwiftUI

时间:2021-01-08 09:07:34

标签: swift swiftui

我想分配我的 storeId,这是我从我的 API 中获取的。我想将它分配给一个全局变量。我使用 onAppear 做到了这一点并且它可以工作,但是当屏幕打开时它会导致延迟。 我正在为此寻找更好的解决方案。我应该在哪里将 storeId 分配给我的全局变量?

这是我的代码:

struct ContentView: View {
    var body: some View {
        ZStack {
            NavigationView {
                ScrollView {
                    LazyVStack {
                        ForEach(storeArray,id:\.id) {                               item in

                            if item.type == StoreItemType.store_Index.rawValue {
                             NavigationImageView(item: item, destinationView: ShowCaseView()
                             .navigationBarTitle("", displayMode: .inline)
                             .onAppear{
                                  Config.storeId = item.data?.storeId
                                })
                            } else if item.type == StoreItemType.store_link.rawValue {

                                if item.data?.type == StoreDataType.html_Content.rawValue {
                                NavigationImageView(item: item, destinationView: WebView())

                                } else if item.data?.type == StoreDataType.product_List.rawValue {
                                NavigationImageView(item: item, destinationView: ProductListView())

                                } else if item.data?.type == StoreDataType.product_Detail.rawValue {
                                NavigationImageView(item: item, destinationView: ProductDetailView())

                                }
                            } else {
                                fatalError()
                            }
                        }
                    }
                }
                .navigationBarTitle("United Apps")
            }
            .onAppear {
                if isOpened != true {
                    getStoreResponse()
                }
            }

            ActivityIndicator(isAnimating: $isAnimating)
        }
    }

    func getStoreResponse() {
        DispatchQueue.main.async {
            store.storeResponse.sink { (storeResponse) in
                isAnimating = false
                storeArray.append(contentsOf: storeResponse.items!)
                isOpened = true

            }.store(in: &cancellable)
            store.getStoreResponse()
        }
    }
}


struct NavigationImageView <DestinationType : View> : View {

    var item : Store
    var destinationView: DestinationType

    var body: some View {
        NavigationLink(destination:destinationView ) {
            Image(uiImage: (item.banner?.url)!.load())
                .resizable()
                .aspectRatio(CGFloat((item.banner?.ratio)!), contentMode: .fit)
                .cornerRadius(12)
                .shadow(radius: 4)
                .frame(width: GFloat(UIScreen.main.bounds.width * 0.9),
                height: CGFloat((UIScreen.main.bounds.width / CGFloat((item.banner?.ratio) ?? 1))))
        }
    }
}

0 个答案:

没有答案
相关问题