1.單個(gè)參數(shù)的函數(shù)
func func1(param:Int){
print(param)
}
func1(1) //打印1
2.多個(gè)參數(shù)的函數(shù)
func func2(param1:Int,param2:Int){
print("param1 \(param1) param2 \(param2)")
}
func2(1, param2: 2) //打印"param1 1 param2 2\n"
3.函數(shù)的outername和innername
(1) innerName 是函數(shù)內(nèi)部使用 outerName 是調(diào)用此函數(shù)時(shí)使用
func func31(outerName1 innerName1:Int,outerName2 innerName2:Int){
print("params1:\(innerName1) params2:\(innerName2)")
}
(2) 默認(rèn)情況下 innerName = outerName ,第一個(gè)參數(shù)沒有outername
func func32(param1:Int,param2:Int){
print("param1 \(param1) param2 \(param2)")
}
func32(1, param2: 2)
(3) 指定第一個(gè)參數(shù)的outerName,那么在調(diào)用時(shí)第一個(gè)參數(shù)就必須帶上outername
func func33(param1Outer param1Inner:Int,param2:Int){
print("param1 \(param1Inner) param2 \(param2)")
}
func33(param1Outer:1, param2: 2)
(4) 如果想忽略outername,可以用 _ 代替,這樣就跟c函數(shù)的調(diào)用形式差不多了
func func3(param1:Int,_ innerName2:Int){
print("params1:\(param1) params2:\(innerName2)")
}
func3(1, 2)
(5) 類和Struct的構(gòu)造函數(shù)的第一個(gè)參數(shù)的outerName 在調(diào)用時(shí)不能省略
struct Point {
var x :Int
var y : Int
}
class PointRef{
var x :Int
var y :Int
init(x:Int,y:Int){
self.x = x
self.y = y
}
}
//let p = Point(1,y:2) //報(bào)錯(cuò)
//let p2 = PointRef( 2,y:3) //報(bào)錯(cuò)
let p = Point(x: 1,y:2) //正確
let p2 = PointRef(x: 2,y:3) //正確
4.函數(shù)的可變參數(shù)
func func4(params:Int...){
print(params)
}
func4(1,2,3,4) //打印"[1, 2, 3, 4]\n"
5.函數(shù)參數(shù)默認(rèn)值
func func5(defaultParam:Int = 1){
print(defaultParam)
}
func5() //打印1
6.參數(shù)的let var inout
(1) 默認(rèn)情況下param的類型為let,不可更改
func func6(param:Int){
param = 1 //報(bào)錯(cuò)
}
(2) 可以將函數(shù)的類型改成var,這樣在函數(shù)內(nèi)部就能修改此參數(shù)的值,但是卻依然無法改變所傳參數(shù)本身的值 ,此方式將在swift3中被deprecate
func func7(var param:Int){
param = 1
}
var a = 2
func7(a)
print(a) //2
(3) 使用inout可以改變所傳參數(shù)本身
func func8(inout param:Int){
param = 1
}
var a = 2
func8(&a)
print(a) //1