**函数:
1. func 函数名(外部参数名1 本地参数名1:参数类型1,外部参数名2 本地参数名2:参数类型2) -> 参数的返回类型{
函数体
}
func greet(outA a:String ,outB b:String)->String{
return a+b
}
1.1 如果提供了外部参数名,函数被调用时,必须使用外部参数名。
greet(outA: "a", outB: "b")
一般,第一参数省略其外部参数名,第二个以后的参数使用其本地参数名作为外部参数名使用。函数的所有本地参数必须不一致,但是可以共享相同的外部参数。
外部参数名就是便于阅读代码,本地参数名才会参与逻辑运算。
1.2 第一个参数省略外部参数名,第二参数及以后的本地参数名当做外部参数名使用(可以将本地参数名命名更有意义些)
func greet(a:String,b:String)->String{
return a+b
}
print(greet("a", b: "b"))
1.3 本地参数名不一致,外部参数名共享:
func greet(out a:String ,out b:String)->String{
return a+b
}
greet(out: "a", out: "b")
1.4 忽略外部参数名(坏处:不便阅读)
func greet(a:String,_ b:String)->String{
return a+b
}
print(greet("a", "b"))
2 默认参数值
func greet(a:Int = 1){
}
3 可变参数
变量类型名后面加(...)的方式来定义可变参数,可变参数在函数体内当做这个类型的一个数组。
func greet(var a:Int,b:Int...)->Int
{
for item in b
{
a += item
}
return a
}
print(greet(1, b: 1,2,3,4))
4 变量参数和常量参数
函数参数默认是常量的。通过在参数名前加关键字 var 来定义变量参数。
在函数体内对变量参数的做的修改,在函数体外是不可见的。
// a 是变量参数,b 是常量参数
func greet(var a:Int,b:Int)->Int{
}
5 输入输出参数
想让函数体内修改一个参数的值,并且在修改完之后函数体之后可见,可以在参数定义前加 `inout` 关键字。
在调用时,需要在参数前面加 & 符号,表示这个值可以被函数修改
func swapTwoInts(inout a:Int, inout _ b:Int){
let temp = a
a = b
b = temp
}
var someInt = 3
var otherInt = 108
swapTwoInts(&someInt, &otherInt)
print("someInt = \(someInt), otherInt = \(otherInt)")
6 函数类型
函数类型可以作为普通的类型使用,可以作为参数类型,返回值类型
7 函数特殊定义
swift 中函数可以嵌套定义。
**