7 函數——《Swift3.0從入門到出家

6 函數swift

函數就是對某個功能的封裝,一個swift程序可能由多個函數組成數組

swift中定義函數的格式:模塊化

func 函數名稱(參數列表) —>函數返回值類型{函數

函數體spa

return 排序

}生命週期

 

函數定義要素:內存

func 是定義函數的關鍵字作用域

函數名名字:爲了加強可讀性,函數的名稱只能用字母字符來命名,函數名稱以駝峯式命名法來命名get

參數列表:能夠帶多個參數,也能夠沒有參數

若是帶有多個參數,格式爲:參數名稱:類型標註,參數名稱:類型標註…

若是函數帶有多個參數,調用函數的時候,向函數傳遞的數據,類型必需要和定義參數的類型徹底對應

 

函數返回值類型:只要是Swift語言識別的類型,均可以做爲函數的返回值類型

若是函數具備返回值,返回的內容用return語句返回

return語句後面能夠添加變量或者表達式

若是函數不具備返回值,return語句能夠缺省

有如下三種寫法:

一、 ->返回值類型  同時缺省

二、寫成   ->()

三、寫成    ->Void

函數優勢:

讓代碼更具備模塊化,提升代碼的可讀性

讓代碼更容易修改和維護

加強代碼的複用性

 

無返回值,無參數函數

func printLine() -> String{

return 「—————-」

}

 

print(printLine())

例子1:求取a + b的和,a = 10,b  = 20

func sumNumber(){

let a  = 10

let b = 20

print(a + b)

}

sumNumber() //調用函數

MARK

*函數只有在調用的時候纔會爲函數中的變量和常量分配空間

*函數若是一直沒有被調用,和沒有定義同樣,函數裏的變量或常量都不佔內存

*函數體重定義的常量和變量,生命週期從函數調用開始,到函數調用結束爲止,做 用域只在函數體內

* 向例子1中定義的變量或者常量,咱們稱爲局部變量或者局部常量

*全局變量的做用域,從定義位置開始,到下面的全部函數都能直接使用這個所有變量

 

帶參數,無返回值函數

 

函數的參數默認爲隱式常量,在函數內部不能進行賦值操做,函數形參的做用只是用來接收調用函數時傳遞過來的數值

例子2:

func sumAAndB(a:Int,b:Int){

a + b

}

 

sumAAndB(10,b:20) //調用函數

 

例子3:判斷從鍵盤輸入的字符是否爲十六進制的合法字符

func isNum(b: String){

    if b.characters.count == 1{

        let b = b[b.startIndex]

        if b >= "0" && b <= "9" || b >= "a" && b <= "f" || b >= "A" && b <= "F"{

            print("這個數是十六進制的字符")

        }else{

            print("這個數不是十六進制的字符")

        }

    }else{

        print("不合法")

    }

}

isNum(「k」)

 

函數參數爲多個不定項數據

 

若是函數參數個數不定,可使用…格式來接收多個數據,至關於接收一個數組

參數位置不定數據的參數只能定義一個

不定數據放在全部參數後面定義

例子4:

func getMoreNumber(num:Int…){

for i in num{

print(i)

}

}

getMoreNumber(1,2,3) //調用函數

1

2

3 //打印結果

 

帶參數,有返回值函數

 

例子5:

func sayGoodBye(personName: String,isSay: Bool) ->String{

    if isSay{

        return "咱們已經認識了"

    }else{

        return sayHello(personName)

        //函數遇到return語句就結束了,return後面的內容不會被執行

    }

}

print(sayGoodBye("Kil", isSay: false))

 

若是函數的返回值存在不肯定值,那麼函數就要將返回值類型定義成可選類型:Int?返回值返回的爲nil

 

例子6:

func divNum(a: Int,b: Int) -> Int?{

    if b != 0{

    return a / b

    }else{

        return nil

    }

}

print(divNum(4, b: 0))

 

函數內部實現改變函數外部參數的值

 

定義函數時的參數稱爲形參,函數調用傳遞的參數,稱爲實參,inout參數實現了形參的值能被修改的功能

 

例子7:交換兩個數的值

func swap(inout a: Int,inout b: Int){

    let tmp = a

    a = b

    b = tmp

}

var m = 10

var n = 30

swap(&m, b: &n)

print(m,n)

實參向形參傳遞數值,咱們稱之爲值傳遞,值傳遞是不能修改實參的值的

實參向形參傳遞地址,咱們稱之爲地址傳遞,地址傳遞能夠修改實參的值

 

例子8:編寫一個函數,函數傳入一個無序的整形數組,函數無返回值,函數的功能是講傳入的數組實現從小到大排序

 

func sort(inout a: [Int]){

    a.sortInPlace()

}

var arr = [1,5,3,23,65,23,12]

sort(&arr)

print(arr)

 

 

外部參數與函數類型

 

func getPan(width: Int,height: Int) ->Int {

    return (width + height) * 2

}

print(getPan(10, height: 20))//此處的height就是隱式的外部參數,由於此處的外部參數和內部參數是同一個

內部參數就是離冒號近的參數名稱,用於參與函數內部運算

外部參數就是離冒號遠的參數名稱,用於函數調用時加強代碼的可讀性,如:

 

func getArea( width: Int, height: Int)->Int {

    return  width * height

}

此處的寬、高就是外部參數

 

外部參數名稱缺省

func personInfo(name: String, _ age: Int) ->String//用_ 表明外部參數缺省

{

    return name + "\(age)"

}

print(personInfo("小明", 19))

 

參數帶有默認值

 

func shape(width: Int = 100) { 

    print(width * width)

}

函數的參數默認是隱式常量,在函數體內不能賦值,可是能夠在定義參數的同時直接初始化

 

函數的重載

 

程序中定義多個同名函數,函數的返回值類型或者函數的參數列表不一樣,這種形式稱爲函數重載

 

原函數:

func getStudentInfo(name: String) {    

    print(name)

}

函數重載1:函數名相同,參數列表不一樣

func getStudentInfo(name: String,age: Int) {

    print(name + "\(age)")

}

函數重載2:函數名相同,參數列表相同,函數返回值不一樣

func getStudentInfo(name: String) ->String {

 

    return name

}

相關文章
相關標籤/搜索