Swift:函數與方法

來源:互聯網
上載者:User

標籤:switch   函數   方法   

在介紹Swift中的函數與方法之前,我們先看看objective-c中函數與方法的寫法,以求兩個數的和為例:

1. 函數寫法

int sum(int a, int b) {    return a + b;}

2. 方法寫法

- (int)sum:(int)a b:(int)b {    return a + b;}

從上面可以看出,兩者的寫法還是有很大不同的。而到了Swift中,直接將兩者進行了統一,寫法如下:

func sum(a: Int, b: Int) -> Int {    return a + b;}

因為兩者進行了統一,所以下面的描述,我統一的稱之為方法。


一、方法的定義格式

func 方法名(參數名稱: 參數類型, ....) -> 返回值類型 {

}


二、方法的幾種形態

1. 沒有返回值的方法

func test(num1: Int) -> Void{    }

或者

func test(num1: Int) -> (){    }

或者

func test(num1: Int){}

2. 沒有形式參數的方法

func test() -> Int{    return 0}

3. 返回多個值的方法,即返回元組形式

func find(id: Int) -> (name: String, age: Int) {    if id > 0 {        return ("Jack", 20)    } else {        return ("Rose", 18)    }}var person = find(2)println("name=\(person.name)", age=\(person.age))

4. 可變參數列表(借鑒了C#中的params)

func sumOf(numbers: Int...) -> Int {    var sum = 0    for number in numbers {        sum += number    }        return sum}//sumOf()  結果為:0//sumOf(1,2,3,4)結果為:10

三、 形參的類型

1. 外部參數名(在形式參數前面再定義一個名稱,這樣調用方法的時候就有名稱提示了)

func test(number1 num1:Int,number2 num2:Int) -> Int{    return num1 + num2}test(number1: 3, number2: 5)

注意到,在參數num1和num2前面分別添加了名稱number1和number2,這樣在調用方法test的時候,系統會自動提示你將要輸入的參數的提示名稱。


2. 提示名稱與形式參數名稱一致,在形式參數前面加上#

func test(#num1:Int, #num2:Int) -> Int{    return num1 + num2}test(num1: 3, num2: 6)


3. 預設參數值(即方法中的某個參數有預設值)

func addStudent(name: String, age: Int = 20){    println("新增學生:name=\(name), age=\(age)")}

從上面的例子可以看出,age這個形式參數有一個預設參數值20. 它的意思是,你調用方法的時候,如果傳入age的值,則將覆蓋掉20這個值;如果只傳入name的值,則age的值就為20.

調用結果如下:

addStudent("Lifei")        // 新增學生:name=Lifei, age=20addStudent("Jack", age: 30)  // 新增學生:name=Jack, age=30

從上面的調用形式可以看出,預設參數值的參數是外部參數名的形式,因為它出現了age這個提示。


4. Swift中預設的方法形式參數是常量參數,不能修改

func test(num1: Int){}

相當於

func test(let num1: Int){}

如果想要參數是變數參數,需手動在形式參數名稱加上var關鍵字,例如

func append(var destStr: String, sourceStr: String, num: Int) -> String{    for _ in 0..<num{        destStr += sourceStr    }    return destStr}var result = append("Lifei", "@", 6)

在變數destStr前面加了var修飾,這樣在方法內部就可以使用destStr進行運算等操作了。


5. 輸入輸出參數,用inout關鍵字修飾

func change(inout num1: Int){    num1 = 10}var a = 20change(&a)a
其實,它的原理就是傳遞的變數的地址,而不是值。再舉個例子,就是交換兩個數的值。

func exchange(inout num1: Int,inout num2: Int){    var temp = num1;    num1 = num2;    num2 = temp;}var a = 10var b = 20exchange(&a, &b)

四、方法類型

Swift中的方法類型也是資料類型的一種,例如:

func test(num1:Int, num2:Int) -> Int{    return num1 + num2}

這個方法的類型就是

(Int, Int) -> Int

可以利用方法類型來定義變數(fn這個變數的類型就是test的方法類型)

var fn:(Int, Int) -> Int = testfn(10,20)

方法做為類型使用舉例1:

func add(num1: Int,num2: Int) ->Int{    return num1 + num2}func minus(num1: Int,num2: Int) ->Int{    return num1 - num2}func divide(num1: Int,num2: Int) ->Int{    return num1 / num2}func calcResult(fn: (Int,Int)->Int, num1: Int, num2: Int) -> Int{    return fn(num1 , num2)}var addResult = calcResult(add, 10, 20)var minusResult = calcResult(minus, 10, 20)var divideResult = calcResult(divide, 100, 5)

可以看出,方法calcResult中的一個參數的類型就是(Int, Int) -> Int, 然後在調用的時候,就非常的方便了。


方法做為類型使用舉例2:

func goToWork(){    println("上班去")}func haveFun(){    println("休息一下")}func howToDo(day: Int) -> Void -> Void{    if(day == 6 || day == 7){        return haveFun    }else{        return goToWork    }}var fn = howToDo(1)fn()

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

Swift:函數與方法

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.