1. 程式人生 > >【Swift】學習筆記(六)——函式

【Swift】學習筆記(六)——函式

函式  懂程式語言的來說這個是最基本的了,任何語言都有函式這個概念,函式就是完成特定任務的獨立程式碼塊。

函式怎麼建立:

1、建立一個無參無返回值的函式(實際上所有的函式都有返回值,這個函式返回void,它是一個空元組)

func testFunc(){
    
}

2、建立一個帶返回值的函式
func testFunc() -> String{
    return "hello"
}

3、建立一個帶引數和返回值的函式
func testFunc(name: String) -> String{
    return "hello"+name
}

4、建立一個帶多個引數和多個返回值的函式
func testFunc(name: String,age: Int) -> (myName:String,myAge:Int){
    return (name,age)
}

5、建立帶引數名稱的函式
func testFunc(myName name: String,myAge age: Int) -> (myName:String,myAge:Int){
    return (name,age)
}

ps:呼叫 

testFunc(myName:"小王", myAge:18)

6、第5中的另外一種寫法,就是外部引數名和區域性變數名是一樣的時候。

func testFunc(#name: String,#age: Int) -> (myName:String,myAge:Int){
    return (name,age)
}

testFunc(name: "小王", age: 18)

7、建立帶預設值引數的函式
func testFunc(#name: String,age: Int = 10) -> (myName:String,myAge:Int){
    return (name,age)
}

testFunc(name: "小王", age: 18)

ps:帶預設值的引數要麼不指定外部引數名(swift會自己預設指定一個就相當於帶了#號了)要麼必須指定,不能用#號

8、建立可變引數的函式

func allNums(nums: Double...) -> Double{
    var totalNum: Double = 0
    for num in nums{
        totalNum += num
    }
    return totalNum
}

allNums(1,2,3)

9、函式引數是常量,不能修改的喔

例如:

func error(a: Int){
    a = 2    這就會出現一個錯誤:Cannot assign to 'let' value 'a'
}

那可以建立能夠修改的麼。當然可以。增加var關鍵字即可。

func error(var a: Int){
    a = 2
}

error(3)

10、函式引數是值傳遞的,那有啥辦法讓它變成引用傳遞呢,也就是讓引數經過了函式的修改,函式外值發生改變了

func yy(inout a:Int,inout b: Int) {
    var c = a
    a = b
    b = a
}
yy(&10, &20)

但是,這樣是錯誤的,哪裡錯了呢。就是函式呼叫的時候,傳入的時字面量,這怎麼改。所以要傳入變數
var a = 10,b=20
yy(&a, &b)


11、頭腦大風暴:函式居然有型別,它還能夠作為引數、型別。

例如:

func yy(inout a:Int,inout b:Int)

這個函式,它的型別是 (Int,Int)-> ()  .

它可以和int double這種用哦。 ----  太強大了 - 怎麼強大呢。其實也就是給函式換了一個名稱而已。例如前面的YY方法。還可以這樣寫:

func yy(a:Int,b: Int) {
    var c = a
}

var testTT : (Int,Int) -> () = yy;

注意的是,這不支援引數 inout。。。

12、函式巢狀

func yy(a:Int,b: Int) {
    func add(a:Int,b:Int) -> Int{
        return a + b
    }
    var test = add(a, b) - a
}

在函式裡面定義函式,在函式裡面呼叫函式,可以嘗試一下在yy函式外面呼叫add函式,看看是什麼效果。。。。