Swift新手教程系列5-函數+selector在swift中的使用方法
阿新 • • 發佈:2017-05-13
move 入口 http event use div 程序 解決 lin
原創blog。轉載請註明出處
格式
func 函數名(參數1,參數2,...)->返回值{
}
參數為空,返回值為Int
在Swift中,函數能夠有隨意類型的參數。由於Swift定義函數本身是一種類型,所以函數本身也能夠返回
函數,或者一個函數作為還有一個函數的參數
一、常見的使用函數方式
1、無參數,返回值為空
沒有返回值的時候->能夠省略
2、多個參數。返回值唯一
3、多個參數,多個返回值
在Swift中。多個返回值經常使用元組來返回
二、外部參數
從上面的樣例中,我們發現,使用的時候我們並沒有看到參數的信息。就是我們並不知道第一個參數是什
麽意思,第二個參數是什麽意思。
比方輸入WenchenHuang Male則返回WenchenHuang:Male.
可是,因為沒有提示信息,我並不知道第一個參數是代表名字。第二個參數代表性別。這時候能夠用外部
參數
調用的時候一目了然,知道哪一個參數代表什麽意思
可是這樣寫仍然比較麻煩。我們不得不為同一個參數提供內部和外部兩個名字
Swift為我們提供了一種簡寫外部參數的方式
僅僅須要在內部參數前加上前綴,內部參數在調用的時候會體現
三、默認參數與變量參數
默認參數就是對參數有個默認值。在函數調用的時候。能夠給這個參數傳值。也能夠不傳,不傳的時候使
用默認值
舉個簡單的樣例
調用的時候
這是swift的一個特點:默認參數生成一個外部參數名稱
在swift中,函數傳入的參數本身是常量。在函數中不能改變。假設想要讓該參數作為可改動的副本。則添
加var
註意:一個函數最多僅僅能有一個可變參數,且必須為最後一個,為了降低內容歧義
比如:
四、可變參數
所謂可變參數。就是想非常多腳本語言那樣。參數個數不明白,而在函數體內部,參數保存在一個數組裏
可變參數用...表示
舉個樣例
五、輸入輸出參數inout
六、函數類型
前面提到過,在swift中函數本身就是一個類型,類似於C語言中的函數指針
BTW:函數類型的理解對後面閉包的理解非常重要
比如:上面的函數func addOne(input:Int)
函數類型就是(Int)->()
所以。我們能夠像其它類型一樣使用函數類型
var add:(Int,Int)->Int 聲明一個入口參數是Int,Int返回值是Int的函數類型變量add
相同。函數類型也能夠作為參數傳遞給函數
函數類型也能夠作為返回值
這裏採用Apple官方文檔裏的說明:
七、函數嵌套
何為函數嵌套,就是在函數裏定義函數,默認嵌套的函數對外不可見。可是可在函數內部調用。
對上面函數進行重寫
八、Selector
在swift中,建議不在使用selector。由於其不是類型安全的。可是對於熟悉Objective-C的程序猿同學來說。非常多方法講不能調用。對此。swift對objective-C的selector直接傳入函數名
近期在用swift寫代碼,盡管遇到一些問題,可是代碼量確實減了不少。
swfit新手教程系列會隨著我使用swfit中的積累,不斷地去修正更新
之前的教程
swift單例模式具體解釋-線程安全,多核性能
swift新手教程4-集合(Array,Dictionary)
swift新手教程3-字符串String
swift新手教程2-運算符
swift新手教程1-準備知識
在swift中,函數有keywordfunc聲明格式
func 函數名(參數1,參數2,...)->返回值{
}
func firstFunction()->Int{ var result = 4 return result } println(firstFunction())//調用
在Swift中,函數能夠有隨意類型的參數。由於Swift定義函數本身是一種類型,所以函數本身也能夠返回
函數,或者一個函數作為還有一個函數的參數
一、常見的使用函數方式
1、無參數,返回值為空
沒有返回值的時候->能夠省略
func hwcFunction(){ println("Hello hwc") }
2、多個參數。返回值唯一
func hwcFunction(first:String,second:String)->String{ return first+second } println(hwcFunction("hello","hwc"))
3、多個參數,多個返回值
在Swift中。多個返回值經常使用元組來返回
func hwcSwapString(first:String,second:String)->(String,String){ return (second,first) } var (second,first) = hwcSwapString("first","second")
二、外部參數
從上面的樣例中,我們發現,使用的時候我們並沒有看到參數的信息。就是我們並不知道第一個參數是什
麽意思,第二個參數是什麽意思。
外部參數能夠完美解決問題
我們來舉個樣例
func addPersonalInformation(Name:String,Sex:String)->String{ return Name+":"+Sex } addPersonalInformation("WenchenHuang","Male")
比方輸入WenchenHuang Male則返回WenchenHuang:Male.
可是,因為沒有提示信息,我並不知道第一個參數是代表名字。第二個參數代表性別。這時候能夠用外部
參數
func addPersonalInformation(name Name:String,sex Sex:String)->String{ return Name+":"+Sex } addPersonalInformation(name:"WenchenHuang",sex:"Male")
調用的時候一目了然,知道哪一個參數代表什麽意思
可是這樣寫仍然比較麻煩。我們不得不為同一個參數提供內部和外部兩個名字
Swift為我們提供了一種簡寫外部參數的方式
僅僅須要在內部參數前加上前綴,內部參數在調用的時候會體現
func addPersonalInformation(#name:String,#sex:String)->String{ return name+":"+sex } addPersonalInformation(name:"WenchenHuang",sex:"Male")
三、默認參數與變量參數
默認參數就是對參數有個默認值。在函數調用的時候。能夠給這個參數傳值。也能夠不傳,不傳的時候使
用默認值
舉個簡單的樣例
func hwcPrint(toPrint:Int = 10){ println(toPrint) }
調用的時候
hwcPrint()//輸出10 hwcPrint(toPrint:11)//輸出11這裏,我們不難看出,在調用的時候swift自己主動為我們生成了一個外部參數的名稱
這是swift的一個特點:默認參數生成一個外部參數名稱
能夠使用下劃線作為默認參數的外幣名稱,這樣swfit不會提供外部參數名稱。但不建議這麽做
在swift中,函數傳入的參數本身是常量。在函數中不能改變。假設想要讓該參數作為可改動的副本。則添
加var
註意:一個函數最多僅僅能有一個可變參數,且必須為最後一個,為了降低內容歧義
比如:
func hwcPrint(toPrint:Int){ toPrint = toPrint+1//Wrong println(toPrint) } func hwcPrint(var toPrint:Int){ toPrint = toPrint+1//Right println(toPrint) }
四、可變參數
所謂可變參數。就是想非常多腳本語言那樣。參數個數不明白,而在函數體內部,參數保存在一個數組裏
可變參數用...表示
舉個樣例
func addMultiString(toPrint:String...)->String{ var resultString:String = "" for tempString in toPrint{ resultString+=tempString } return resultString } var result1 = addMultiString("hello","world") var result2 = addMultiString("Wen","chen","Huang")
五、輸入輸出參數inout
這類參數傳入原值得引用。函數內對傳入參數的操作會改變原始值,傳入引用的時候須要使用&
func addOne(inout input:Int){ ++input } var test1 = 10 addOne(&test1)//test1 = 11 func addOne(var input:Int){ ++input } var test2 = 10 addOne(test3)//test2 = 10
六、函數類型
前面提到過,在swift中函數本身就是一個類型,類似於C語言中的函數指針
BTW:函數類型的理解對後面閉包的理解非常重要
比如:上面的函數func addOne(input:Int)
函數類型就是(Int)->()
所以。我們能夠像其它類型一樣使用函數類型
var add:(Int,Int)->Int 聲明一個入口參數是Int,Int返回值是Int的函數類型變量add
相同。函數類型也能夠作為參數傳遞給函數
func addThree(addTwo:(Int,Int)->Int,thrid:Int)->Int{ return addTwo+thrid }
函數類型也能夠作為返回值
這裏採用Apple官方文檔裏的說明:
func stepForward(input: Int) -> Int { return input + 1 } func stepBackward(input: Int) -> Int { return input - 1 } func chooseStepFunction(backwards: Bool) -> (Int) -> Int { return backwards ?stepBackward : stepForward } let moveNearerToZero = chooseStepFunction(currentValue > 0)
七、函數嵌套
何為函數嵌套,就是在函數裏定義函數,默認嵌套的函數對外不可見。可是可在函數內部調用。
對上面函數進行重寫
func chooseStepFunction(backwards: Bool) -> (Int) -> Int { func stepForward(input: Int) -> Int { return input + 1 } func stepBackward(input: Int) -> Int { return input - 1 } return backwards ? stepBackward : stepForward }
八、Selector
在swift中,建議不在使用selector。由於其不是類型安全的。可是對於熟悉Objective-C的程序猿同學來說。非常多方法講不能調用。對此。swift對objective-C的selector直接傳入函數名
myButton.addTarget(self, action: "buttonTapped:", forControlEvents: .TouchUpInside) let timer = NSTimer(timeInterval: 1, target: self, selector: "test", userInfo: nil, repeats: false) func test{ //Do something } function buttonTapped(sendr:AnyObject){ //Do something }
Swift新手教程系列5-函數+selector在swift中的使用方法