【swift-總結】閉包

來源:互聯網
上載者:User

標籤:

其實閉包就是函數
作為條件的函數

閉包運算式

首先聲明一個數組

var names = ["Charis", "Alex", "Ewa", "Barry", "Daniella"]

將這個數組按照字母排序

聲明一個閉包函數

func backwards(s1: String, s2:String) -> Bool  {    return s1 > s2}

sorted()函數返回一個數組,sort()函數返回空,排序自身

///傳入閉包函數names.sort(backwards)
使用閉包運算式
//閉包運算式就是一個函數在花括弧裡面names.sort({(s1: String, s2: String) -> Bool in return s1 > s2})
又因為swift的值是可推斷類型

上面的又可以簡化

var reversed = names.sorted({s1, s2 in return s1 > s2})
單閉包隱式返回
//會隱式returnnames.sorted({s1, s2 in s1 > s2})
名稱縮寫
names.sort({$0 > $1})
運算子函數
names.sort(>)
尾隨閉包

有時候閉包運算式太麻煩,可以把閉包寫在調用函數後面的花括弧中

//調用sort函數,後面添加花括弧,然後閉包運算式就寫在這裡names.sort() {$0 > $1}

官方例子

//聲明一個字典let digitNames = [0:"zero", 1:"one", 2:"two", 3:"three", 4:"four", 5:"five", 6:"six", 7:"seven", 8:"eight", 9:"nine"]//一個數組let numbers = [16, 58, 510]//調用map函數,裡面傳入閉包let strings = numbers.map{//傳入一個number返回一個String    (var number) -> String in    var output = ""    while number > 0 {        output = digitNames[number % 10]! + output//找到每一個數字,轉為字串        number /= 10    }    return output}
值捕獲

首先閉包是參考型別
官方例子

///定義一個返回() -> Int 類型的函數func makeIncrementor(forIncrement amount:Int) -> () -> Int {    var runningTotal = 0    //一個閉包函數    func incrementor() -> Int {        runningTotal += amount;        return runningTotal    }    //返回這個閉包,此時這個閉包已經包含runningTotal和amount的值    return incrementor}
let incrementByTen1 = makeIncrementor(forIncrement: 10)let incrementByTen2 = makeIncrementor(forIncrement: 1)incrementByTen1()   //10 所以值會被閉包一直保留incrementByTen1()   //20incrementByTen2()   //1

著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

【swift-總結】閉包

相關文章

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.