如何正确向SwiftUI子视图传递带参数的异步函数?
解决SwiftUI中传递带参数异步函数到子视图的问题
你的错误出在SubView中对函数属性的声明语法上,Swift里不能直接用let saveIdsWatchedTime(memetime: Int) -> Void这种方式定义函数类型的属性,需要用异步闭包类型来声明。
修正后的完整代码
struct ContentView: View { func saveIdsWatchedTime(memetime: Int) async { print("result:") print(memetime) } var body: some View { VStack{ // 直接传递函数引用即可,Swift会自动推断类型 SubView(saveIdsWatchedTime: saveIdsWatchedTime) } } } struct SubView: View { // 正确声明带参数标签的异步闭包类型 let saveIdsWatchedTime: (_ memetime: Int) async -> Void var body: some View { Text("bla") .onTapGesture { Task(priority: .background) { // 调用异步函数时必须使用await await saveIdsWatchedTime(123) } } } }
关键说明
- 子视图中必须用闭包类型语法定义属性:
(_ memetime: Int) async -> Void,其中async标记这是一个异步闭包,参数标签memetime通过_ memetime保留(如果不需要参数标签,可以简化为(Int) async -> Void)。 - 调用异步闭包时,必须在
Task内部使用await关键字,这是Swift异步编程的要求。 - 父视图传递函数引用时,直接写函数名
saveIdsWatchedTime即可,Swift会自动完成类型匹配。
内容的提问来源于stack exchange,提问作者TheGreatCornholio
相关产品推荐
相关产品推荐

