可变参数就是说,一个函数可以接受多个参数(0-n),但是对于一个函数,只能最多有一个可变参数,可变参数前面需要加_
标记。
例子:
func sum(_ nums: Int...) -> Int {
var sum = 0
for num in nums {
sum += num
}
return sum
}
let mySum = sum(1, 2, 3)
print(mySum)
运行结果为:
6
但是如果去掉_
标记,将不能正确识别可变参数:
func sum(nums: Int...) -> Int {
var sum = 0
for num in nums {
sum += num
}
return sum
}
let mySum = sum(1, 2, 3)
print(mySum)
运行结果:
dictFunny.swift:40:16: error: missing argument label 'nums:' in call
let mySum = sum(1, 2, 3)
^
nums:
如果需要加其他参数:
func sum(when: String, _ nums: Int..., needPrint: Bool) -> Int {
var sum = 0
for num in nums {
sum += num
}
return sum
}
let mySum = sum(when: "now", 1, 2, 3, needPrint: true)
print(mySum)
其他参数没有_
标记,所以可以正确识别,另外在调用的时候,一定要确保let mySum = sum(when: "now", 1, 2, 3, needPrint: true)
传入了参数名,否则会报错:
dictFunny.swift:40:16: error: missing argument for parameter 'when' in call
let mySum = sum("now", 1, 2, 3, true)
^
其实,可变参数和数组作为参数没有大的区别,上面也可以实现为:
func sum(when: String, nums: [Int], needPrint: Bool) -> Int {
var sum = 0
for num in nums {
sum += num
}
return sum
}
let mySum = sum(when: "now", nums: [1, 2, 3], needPrint: true)
print(mySum)
运行结果不变,个人认为可以看需要进行取舍。