Swift學習2---函數和閉包

來源:互聯網
上載者:User

標籤:

函數

  Swift使用func關鍵字聲明函數:

func greet(name: String, day: String) -> String {    return "Hello \(name), today is \(day)."}greet("Bob", "Tuesday")

  通過元組(Tuple)返回多個值:

func getGasPrices() -> (Double, Double, Double) {    return (3.59, 3.69, 3.79)}getGasPrices()

  支援帶有變長參數的函數,用一個數組來擷取它們:

func sumOf(numbers: Int...) -> Int {    var sum = 0    for number in numbers {        sum += number    }    return sum}sumOf()sumOf(42, 597, 12)

  函數也可以嵌套函數:

func returnFifteen() -> Int {    var y = 10    func add() {        y += 5    }    add()    return y}returnFifteen()

  作為頭等對象,函數既可以作為傳回值,也可以作為參數傳遞:

// 做傳回值func makeIncrementer() -> (Int -> Int) {    func addOne(number: Int) -> Int {        return 1 + number    }    return addOne}var increment = makeIncrementer()increment(7)// 做參數func hasAnyMatches(list: Int[], condition: Int -> Bool) -> Bool {    for item in list {        if condition(item) {            return true        }    }    return false}func lessThanTen(number: Int) -> Bool {    return number < 10}var numbers = [20, 19, 7, 12]hasAnyMatches(numbers, lessThanTen)
 閉包

  本質來說,函數是特殊的閉包,Swift中可以利用{}聲明匿名閉包:

numbers.map({    (number: Int) -> Int in    let result = 3 * number    return result    })

  如果一個閉包的類型已知,比如作為一個回呼函數,你可以忽略參數的類型和傳回值。單個語句閉包會把它語句的值當做結果返回。 

numbers.map({ number in 3 * number })

  你可以通過參數位置而不是參數名字來引用參數——這個方法在非常短的閉包中非常有用。 當一個閉包作為最後一個參數傳給一個函數的時候,它可以直接跟在括弧後面。 

sort([1,5,3,12,2]){$0>$1}

   閉包其實是 Swift 的一種類型,寫作()->(),那麼他就可以當做 func 的參數嵌套了。寫成這樣:

140    func exec(repeat: Int, block:()->()) 141    { 142      for i in 1...repeat{ 143          block() 144      } 145    } 146      147    exec(10, {println("Hello World")}) 

  Swift 還提出了一個特殊的詞彙:Trailing Closures,他的意思是:如果閉包是func的最後一個傳參,那麼他可以寫在外面。如下:

148    func exec(repeat: Int, block:()->()) 149    { 150        for i in 1...repeat{ 151            block() 152        } 153    } 154      155    exec(10){ 156        println("Hello World") 157    }  

 

Swift學習2---函數和閉包

相關文章

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.