You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将带闭包参数的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 19:32:38