关于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
相关产品推荐
相关产品推荐

