如何将带闭包参数的Void函数转换为可传递字符串的闭包?
修正Swift闭包以支持字符串参数传递
你的问题出在Action类型别名的定义上,当前它是无参数的闭包类型,无法承载字符串传递需求。以下是两种修正方案:
方案一:调整类型别名
// 修正Action类型,定义为接收String参数的闭包 typealias Action = (String) -> Void // 重新定义myClosure,调用action时传入"Hello" let myClosure: (Action) -> Void = { action in action("Hello") }
方案二:直接指定闭包类型(无需typealias)
let myClosure: ((String) -> Void) -> Void = { action in action("Hello") }
调用示例
两种方案都支持你想要的调用方式:
myClosure { newValue in print(newValue) // 控制台输出:Hello }
原理说明:将闭包参数的类型从() -> Void改为(String) -> Void,就为外部闭包提供了接收字符串参数的入口,同时在myClosure内部调用传入的闭包时,把预设的"Hello"传递进去,就能实现和原myFunction完全一致的功能。
内容的提问来源于stack exchange,提问作者swiftPunk
相关产品推荐
相关产品推荐

