Swift新手教程系列5-函數+selector在swift中的使用方法

來源:互聯網
上載者:User

標籤:.net   turn   操作   var   apple   傳值   href   function   sid   

原創blog。轉載請註明出處

近期在用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 = 4return result}println(firstFunction())//調用
參數為空白,傳回值為Int

在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()//輸出10hwcPrint(toPrint:11)//輸出11
這裡,我們不難看出,在調用的時候swift自己主動為我們產生了一個外部參數的名稱
這是swift的一個特點:預設參數產生一個外部參數名稱

能夠使用底線作為預設參數的外幣名稱,這樣swfit不會提供外部參數名稱。但不建議這麼做


變數參數
在swift中,函數傳入的參數本身是常量。在函數中不能改變。假設想要讓該參數作為可改動的副本。則添
加var
注意:一個函數最多僅僅能有一個可變參數,且必須為最後一個,為了降低內容歧義

比如:
func hwcPrint(toPrint:Int){toPrint = toPrint+1//Wrongprintln(toPrint)}func hwcPrint(var toPrint:Int){toPrint = toPrint+1//Rightprintln(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 = 10addOne(&test1)//test1 = 11func addOne(var input:Int){++input}var test2 = 10addOne(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中的使用方法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.