调用中的无关参数标签'number:'



当我在学习' function '时,我遇到了一个问题,在call ';中显示'多余的参数标签'number:'我的代码的错误信息。我想知道为什么我不应该写上"数字"。在论点吗?

func makeIncrementer() -> ((Int) -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = makeIncrementer()
increment(number: 7)

输入图片描述

问题是您返回的是(Int) -> Int,它没有为其参数指定名称。理想情况下,您希望写入

func makeIncrementer() -> ((number: Int) -> Int)

但是在Swift中是不允许的:

function types cannot have argument labels; use '_' before 'number'

你能做的最好的就是

func makeIncrementer() -> ((_ number: Int) -> Int)

这个策略可能会让你的代码更清晰一些,因为给参数一个名字会让它的目的更明显。不幸的是,在调用返回的函数

时仍然必须省略number:标签:
let increment = makeIncrementer()
increment(7)  // <- no `number:` label

理由是什么?

在Swift 3之前可以为函数类型指定参数标签。问题是你可以写

func add(numToAdd: Int) -> Int { ... }
func subtract(numToSubtract: Int) -> Int { ... }
let f: ((numToAdd: Int) -> Int) = subtract

然后调用f(numToAdd: 3)实际上会调用subtract(numToSubtract: 3),这是相当令人惊讶的,并且会引起混淆。

查看此提案以了解删除此功能的完整理由。

最新更新