SwiftUI onSubmit调用异步函数报错:无法传递异步函数类型
解决SwiftUI onSubmit闭包异步代码类型不匹配报错
问题代码
TextField("search", text: $searchText) .accentColor(Color("ClickableLink")) .foregroundColor(.white) .focused($focusedField, equals: .field) .onAppear { self.focusedField = .field } .onSubmit { loadinglayout = true do { try await getMemes() } catch { print(error) } }
报错信息
Cannot pass function of type '() async -> Void' to parameter expecting synchronous function type
解决方案
报错核心原因是onSubmit默认接受同步闭包,直接在其中写async/await异步代码会触发类型不匹配。只需把异步逻辑包裹在Task中,创建异步上下文执行即可:
TextField("search", text: $searchText) .accentColor(Color("ClickableLink")) .foregroundColor(.white) .focused($focusedField, equals: .field) .onAppear { self.focusedField = .field } .onSubmit { loadinglayout = true // 用Task包裹异步代码,适配同步闭包的类型要求 Task { do { try await getMemes() } catch { print(error) } } }
说明
此前的do-catch结构仅能处理异步方法的错误,但无法解决「同步闭包不能容纳异步逻辑」的类型不匹配问题。Task会启动独立的异步任务,既不会阻塞主线程,也能满足onSubmit对闭包类型的要求。
内容的提问来源于stack exchange,提问作者user19559647
相关产品推荐
相关产品推荐

