Swift中文教程(四)函數和閉包

來源:互聯網
上載者:User

Function 函數

Swift使用func關鍵字來聲明函數,函數通過函數名加小括弧內的參數列表來調用。使用->來區分參數名和傳回值的類型:

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

練習:

remove day參數,增加一個參數,比如:今天的午餐特色菜~

func greet(name:String, day:String) -> String{          return "Hello \(name), today is \(day)."  //第二章說過用\()來內嵌變數        }        greet('Joe', '菩提玉齋')

函數使用元組(tuple)來返回多個值:

1 func getGasPrices() -> (Double, Double, Double) {
2     return (3.59, 3.69, 3.79)
3 }
4 getGasPrices()

函數還可以接收可變的參數個數,將這些參數收集在數組裡面:

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

練習:

編寫一個函數並求出其參數的平均值。

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/extra/

函數是可以嵌套的,嵌套過的函數可以訪問到外部函式宣告過的變數,使用函數嵌套可以便於你組織過長或複雜的函數:

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

在Swift中,函數是第一等類型,這意味著一個函數可以將另外一個函數作為它的傳回值:

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)

Closure 閉包

函數其實是一種閉包的特殊情況,你可以寫一個用花括弧{}包裹的匿名閉包,用in來區分參數與主體的傳回型別:

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

   練習:

   重寫這個閉包來對所有奇數返回0

閉包有多種簡潔的寫法。當傳回值類型已知時,比如委託回調,你就可以省略它的參數類型,它的傳回值類選,或者二者都略去,單行語句的閉包可以直接隱式地返回此一語句的值:

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

你可以通過數字而不是名字來引用一個參數,這對於很短的閉包非常有用。一個閉包通過圓括弧傳遞其最後一個參數到函數能立即生效:

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

作者:cnblogs Joe.Huang

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.