[英]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.