【Swift】學習筆記(六)——函式
阿新 • • 發佈:2019-01-07
函式 懂程式語言的來說這個是最基本的了,任何語言都有函式這個概念,函式就是完成特定任務的獨立程式碼塊。
函式怎麼建立:
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函式,看看是什麼效果。。。。