簡體   English   中英

SwiftUI 如何讓我的應用暫停,直到收到一些 API 數據?

[英]SwiftUI how can I make my app pause until I receive some API Data?

struct LoginView: View {
    @State private var username = ""
    private var searchAllowed : Bool{
        if(username.count>2)
        {
            return false
        }
        return true
    }


    var body: some View {
        NavigationView{
            VStack{
                Text("Enter your Username:")
                    .font(.title.bold())


                TextField("Username", text: $username)
                    .frame(width: 280)
                    .padding(.bottom)


                NavigationLink{
                    Text("Test")
                } label:
                {
                    ZStack{
                        RoundedRectangle(cornerRadius: 5)
                            .fill(.gray)
                            .frame(width: 200, height: 50)

                        Text("Search")
                            .foregroundColor(.white)
                        .task { await loadData() } 

                }
            }
                .disabled(searchAllowed)
        }

        }
    }
    func loadData() async{
        guard let url = URL(string: url) else{
            print("bad url")
            return
        }
        do {
            let (data, _) = try await URLSession.shared.data(from: url)

            if let decodedRespose = try? JSONDecoder().decode(ApiResponse.self, from: data){
                //do smth
                print(decodedRespose)





            }
        } catch{
            print("bad")
        }
    }
}

所以我想要它,這樣當我按下搜索 NavigationLink 時,它只會在 api 調用成功並且我得到一些我需要的特定數據時才將我帶到視圖,我怎樣才能讓它像這樣有條件? 這一切都是同步的,所以在將用戶移動到新視圖之前,我似乎迫不及待地想看看我是否擁有正確的數據。

正如@NoeOnJupiter 所說。

在 NavigationLink 目標中,使用顯示ProgressView的條件視圖邏輯,在loadData()完成后,翻轉 boolean 並顯示所需的視圖,顯示 API 數據

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM