函數是有特定功能的代碼段,函數會有一個特定的名稱調用時來使用。Swift提供了十分靈活的方式來建立與調用函數。事實上在Swift,每一個函數都是一種類型,這種類型由參數和返回值來決定。Swift和Objective-C的一大區別就在於Swift中的函數能夠進行嵌套。數組
函數經過函數名,參數和返回值來定義,參數和返回值決定一個函數的類型,在調用函數時,使用函數名來進行調用,示例以下:閉包
//傳入一個名字 打印並將其返回 func printName(name:String) -> String { print(name) return name } //進行函數的調用 printName("HS")
也能夠建立沒有參數的函數:函數
func onePuseTwo()->Int { return 1+2 } onePuseTwo()
一樣也能夠建立沒有返回值的函數:spa
func sayHello(){ print("Hello") } sayHello()
上面介紹的函數類型都比較常見,對於多返回值的函數,在Objective-C中十分難處理,開發者一般會採用字典、數組等集合方式或者乾脆使用block回調,在Swift中,可使用元組做爲函數的返回值,示例以下:指針
func tuples()->(Int,String){ return (1,"1") } tuples()
也能夠是函數返回一個Optional類型的值,支持返回nil,示例以下:code
func func1(param:Int)->Int? { guard(param>0)else{ return nil } return param } func1(0) func1(1)
在函數的參數名前,開發者還能夠再爲其添加一個參數名稱做爲外部參數名,示例以下:開發
func func1(count param:Int ,count2 param2:Int)->Int? { //內部依然使用param guard(param>0)else{ return nil } return param } //外部調用使用count func1(count: 0,count2: 0) func1(count: 1,count2: 1)
其實Swift函數中的參數列表有這樣一個特色,除了第一個參數外,以後的參數都默認添加一個一個和內部名稱相同的外部名稱,若是開發者不想使用這個外部名稱,使用_符號設置,示例以下:io
func func2(param:Int,param2:Int,param3:Int) { } //有外部名稱 func2(0, param2: 0, param3: 0) func func3(param:Int,_ param2:Int,_ param3:Int) { } //沒有外部名稱 func3(0, 0, 0)
Swift也支持開發者爲函數的參數建立一個默認值,若是函數的某個參數有設置默認值,則開發者在調用時能夠省略此參數,示例以下:數據類型
func func4(param:Int=1,param2:Int=2,param3:Int) { print(param,param2,param3) } func4(3,param3:3)
還有一種情形在Objective-C中也很處理,對於參數數量不定的函數,在前面章節介紹過,Objective-C通常會使用list指針來完成,在Swift中編寫這樣的函數十分簡單,示例以下:語法
func func5(param:Int...) { for index in param { print(index) } } func5(1,2,3,4)
Swift中參數默認是常量,在函數中是不能修改外部傳入參數的值得,若是有需求,須要將參數聲明成inout類型,示例以下:
func func6(inout param:Int) { param = 10 } var count = 1 //實際上傳入的是參數地址 func6(&count) print(count)
函數是一種特殊的數據類型,每個函數屬於一種數據類型,示例以下:
func func7(a:Int,_ b:Int)->Int{ return a+b } var addFunc:(Int,Int)->Int = func7 addFunc(1,2)
函數也能夠做爲參數傳入另外一個函數,這十分相似於Objective-C中的block語法,示例以下:
func func7(a:Int,_ b:Int)->Int{ return a+b } var addFunc:(Int,Int)->Int = func7 addFunc(1,2) func func8(param:Int,param2:Int,param3:(Int,Int)->Int) -> Int { return param3(param,param2) } //傳入函數 func8(1, param2: 2, param3: addFunc) //閉包的方式 func8(2, param2: 2, param3:{ (a:Int,b:Int) -> Int in return a*b })
一我的函數也能夠做爲另外一個函數的返回值,示例以下:
func func9()->(Int)->Int{ //Swift支持嵌套函數 func tmp(a:Int)->Int{ return a*a } return tmp } var myFunc = func9() myFunc(3)
專一技術,熱愛生活,交流技術,也作朋友。
——琿少 QQ羣:203317592