Swift講解專題七——函數

Swift講解專題七——函數

1、引言

        函數是有特定功能的代碼段,函數會有一個特定的名稱調用時來使用。Swift提供了十分靈活的方式來建立與調用函數。事實上在Swift,每一個函數都是一種類型,這種類型由參數和返回值來決定。Swift和Objective-C的一大區別就在於Swift中的函數能夠進行嵌套。數組

2、函數的建立與調用

        函數經過函數名,參數和返回值來定義,參數和返回值決定一個函數的類型,在調用函數時,使用函數名來進行調用,示例以下:閉包

//傳入一個名字 打印並將其返回
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)

3、函數類型

        函數是一種特殊的數據類型,每個函數屬於一種數據類型,示例以下:

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

相關文章
相關標籤/搜索