参数标签、参数名称
// 合理利用标签和名称,可以增加可读性,代码更接近自然语言
/*
参数标签(外部参数):from
参数名称(内部参数):hometown
*/
func greet(person: String, from hometown: String) -> String {
return "Hello \(person)! Glad you could visit from \(hometown)."
}
print(greet(person: "Bill", from: "Cupertino"))
参数设置默认值
习惯上,无默认值得参数放前面,因为它们比较重要
func someFunction(parameterWithoutDefault: Int, parameterWithDefault: Int = 12) {
// 如果你在调用时候不传第二个参数,parameterWithDefault 会值为 12 传入到函数体中。
}
someFunction(parameterWithoutDefault: 3, parameterWithDefault: 6) // parameterWithDefault = 6
someFunction(parameterWithoutDefault: 4) // parameterWithDefault = 12
可变参数
// 一个函数只允许存在一个数量可变的参数
func sum(nums:Int...)->Int{
var count = 0
for item in nums {
count += item
}
return count
}
输入输出参数:函数内修改传入的外部参数的值,对函数体外产生影响的一种方式
var a = 10,b = 20
func changeValue(_ a:inout Int,_ b:inout Int){
let temp = a
a = b
b = temp
}
changeValue(&a, &b)
// inout ,&,inout参数不能设置默认值
// 不能传 常量 和 字面量
函数可以作为参数或者返回值
var arr = [1,2,3,5,4]
// 系统api将函数作为参数的实例:arr.sort(by: (Int, Int) throws -> Bool)
函数嵌套、局部函数
// 根据条件选择函数
func choseFunction(back:Bool)->(Int)->Int{
let f:(Int)->Int
if back {
func add(num: Int)->Int{return num + 1}
f = add
}else {
func sub(num:Int)->Int{return num - 1}
f = sub
}
// 传递函数给外部调用
return f
}
var num = 4
let f = choseFunction(back: num < 0)
while num != 0 {
print(num)
num = f(num)
}
网友评论