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

关于Swift函数类型中同类型函数参数替换的疑问确认

关于Swift函数类型作为参数的疑问解答

首先纠正你代码里的一个笔误:调用doMath时写的addNumbers应该是addNumber,否则会因为找不到该函数报错。

回到你的问题:是的,只要函数类型完全匹配,就可以直接替换传入,这是Swift中函数类型作为参数传递的核心逻辑,不过还有几个细节需要注意:

  • 函数类型的匹配标准是参数数量、参数类型、返回值类型三者完全一致,和函数的具体实现无关。比如multNumber(乘法)和addNumber(加法)都符合(Int, Int) -> Int这个类型,所以都能传给doMath的第一个参数。
  • 要区分「传递函数引用」和「调用函数」:直接写函数名addNumber是传递函数本身;如果写成addNumber(5,10),就变成传递函数调用后的返回值(一个Int),此时类型不匹配会报错。
  • 参数标签的隐性要求:你的示例里所有函数都用_省略了外部参数标签,所以传递时没有问题。如果doMath的参数类型显式指定了外部标签(比如(first: Int, second: Int) -> Int),那传入的函数也需要对应匹配的外部标签,否则会出现类型不匹配的问题。

举个额外的例子,你完全可以再写一个符合类型的自定义函数,比如:

func subtractNumber(_ first: Int, _ second: Int) -> Int {
    return first - second
}

把它传给doMath也能正常运行并输出减法结果,本质还是因为它的函数类型和doMath要求的一致。

内容的提问来源于stack exchange,提问作者neuraldag

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:30:05