Swift入門篇-閉包和函數

來源:互聯網
上載者:User

 今天主要是給大家分享的是 swift中閉包的用法,我個人覺得閉包就是函數的簡寫方法,如果您函數不是很熟悉請查閱 swift入門篇-函數

 

1:函數類型

函數類型 var  變數 :(類型)->傳回值 =函數名說明:1:函數名 表示函數地址2:(類型)->傳回值 表示函數類型3:函數類型必須和函數名的參數和傳回值一致

例子

/*1:func 是函數關鍵字2:Say是函數名,表示函數的地址
3:Say函數 參數是整形 傳回值為布爾類型
*/

func Say(num:Int)->Bool{

return num > 10
}
var By:(Int)->Bool = Say

/*
1:Say是函數名的地址,並且函數類型,參數為整形,傳回值布爾類型
2:(Int)->Bool 表示 函數類型,參數為整形 ,傳回值為布爾類型。
即:By是函數變數(參數為整形,傳回值為布爾類型) 指向函數名(Say)
*/

var b = By(12) //by(12)直接調用函數
println(b)

運行結果
true

2:閉包格式

 格式 :  {      (參數:類型) ->傳回型別  in        執行方法        return 傳回型別   }

說明:
1;閉包主要指向函數類型
2:閉包的參數必須和函數類型的參數和傳回值一致

例子

/*函數Getlist說明參數:  1:第一個參數 整形集合變數  2:第二參數,函數類型變數 參數為整形傳回值布爾類型傳回值  整形集合*/func GetList(arr:Int[] , pre:(Int)->Bool) ->Int[]{       //定義一個空的可變整形集合    var tempArr = Int[]()    for temp in arr {        if pre(temp){            tempArr += temp;        }    }    return tempArr;}/*調用Getlist 說明第一個參數 整形數組 [1,2,3,4]第二個參數  閉包 來指向給 函數類型 。{(s) in return s>2} 閉包類型說明,參數為整形,傳回值為布爾類型*/let arr=GetList([1,2,3,4],{(s:Int) in return s>2})println(arr)運行結果[3, 4]

 3:閉包簡寫方法

  1;第一種簡寫 :省略 參數類型和括弧

  2:第二種簡寫 : 省略 參數類型和括弧,return關鍵字

  3:第三種簡寫 : 參數名稱縮寫 (用$0代表第一個參數,$1代表第二個參數)

/*函數Getlist說明參數:  1:第一個參數 整形集合變數  2:第二參數,函數類型變數 參數為整形傳回值布爾類型傳回值  整形集合*/func GetList(arr:Int[] , pre:(Int)->Bool) ->Int[]{       //定義一個空的可變整形集合    var tempArr = Int[]()    for temp in arr {        if pre(temp){            tempArr += temp;        }    }    return tempArr;}//第一種簡寫 :省略 參數類型和括弧var Arr = GetList([1,2,3,4],{s in return s>2})//第二種簡寫 : 省略 參數類型和括弧,return關鍵字Arr = GetList([1,2,3,4], {s in s>2}) //第三種簡寫 : 參數名稱縮寫 Arr = GetList([1,2,3,4],{$0>2}) //其中$0表示第一個參數println(Arr)以上3種用法的運行結果為[3, 4]

 4:尾隨閉包

官方定義:尾隨閉包是一個書寫在函數括弧之後的閉包運算式,函數支援將其作為最後一個參數調用

/*1: 函數 Fuction 的參數 函數類型2: 參數為函數類型,函數類型,參數為空白,傳回值為空白*/func Fuction(closure: () -> ()) {    println("無參數,無傳回值的韓式類型")}//-----------------第一種調用方法------------/*調用函數Fuction1:參數為閉包2:閉包的參數為空白,傳回值為空白*/Fuction({})//-----------------第二種調用方法------------Fuction() { }以上2種調用方法的運行結果都是無參數,無傳回值的韓式類型

 後面的文章,我回陸續把我學習到swift語言的知識寫出來形成一個系列。由於是新語言,難免有不足,歡迎給我提出意見。也可以加我QQ 1436051108一起討論,如果您有什麼問題,也可以直接在QQ留言發給我,我看到之後第一時間回複您

  最後總結一下。送上一直思維導圖,作為文章的結束

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.