簡體   English   中英

如何在 onSubmit 塊中使用 swift await func

[英]how use swift await func in onSubmit block

我有一個包含搜索數據的列表。 獲取我想調用 await func (swift 5.5) 的數據,但出現此錯誤:

“無法將類型為‘() async -> ()’的函數傳遞給需要同步函數類型的參數”

這是我的代碼:

struct ContentView: View {


@ObservedObject var twitterAPI: TwitterAPI = TwitterAPI()

@State private var searchText = "TheEllenShow" // TheEllenShow

var body: some View {
    NavigationView {
        VStack{
            if twitterAPI.twitterSearchResults?.resultDataVM != nil{
                List {
                    ForEach((twitterAPI.twitterSearchResults?.resultDataVM)!) { item in
                        Text(item.text)
                    }
                }
                .refreshable {
                    await twitterAPI.executeQuery(userName: searchText)
                }
            }else{
                Text("Loading")
            }
            Spacer()
            
            
        }
        .searchable(text: $searchText)
        .onSubmit(of: .search) {
            await twitterAPI.executeQuery(userName: searchText)
        }

        .navigationTitle("Twitter")
        
    }
    .task {
        await twitterAPI.executeQuery(userName: searchText)
    }
}  }

要從同步代碼塊調用異步代碼,您可以創建一個Task對象:

.onSubmit(of: .search) {
  Task {
    await twitterAPI.executeQuery(userName: searchText)
  }
}

你可以像這樣將它反彈到.task

@State var submittedSearch = ""
@State var results = []    

.onSubmit(of: .search) {
    submittedSearch = searchText
}
.task(id: submittedSearch) {
    if submittedSearch.isEmpty {
        return
    }
    results = await twitterAPI.executeQuery(userName: submittedSearch)
}

優點是如果搜索更改以及底層 UIView 消失時它將被取消並重新啟動。

暫無
暫無

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

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