1. 程式人生 > >iOS-swift-函數和閉包

iOS-swift-函數和閉包

let sda rem blog ios div cond 一個 功能

一、函數

關鍵字:func

參數列表用 , 分割

使用 -> 分割參數和返回值

1     func greet(person: String, day: String) -> String {
2         return "Hello \(person), today is \(day)."
3     }
4     greet(person: "Bob", day: "Tuesday")

在參數名前面加 _ 表示隱藏參數標簽,也可以添加參數名。

1     func greet(_ person: String, on day: String) -> String {
2 return "Hello \(person), today is \(day)." 3 } 4 greet("John", on: "Wednesday")

使用元組(tuple)構建復合類型值。比如一個函數返回多個值。元組的元素可以通過名字或者下標獲取。

 1     func calculateStatistics(scores: [Int]) -> (min: Int, max: Int, sum: Int) {
 2         var min = scores[0]
 3         var max = scores[0]
 4
var sum = 0 5 6 for score in scores { 7 if score > max { 8 max = score 9 } else if score < min { 10 min = score 11 } 12 sum += score 13 } 14 15 return (min, max, sum)
16 } 17 let statistics = calculateStatistics(scores: [5, 3, 100, 3, 9]) 18 print(statistics.sum) 19 print(statistics.2)

函數可以使用變化的參數,這些參數將會放進數組裏面。

1     func sumOf(numbers: Int...) -> Int {
2         var sum = 0
3         for number in numbers {
4             sum += number
5         }
6         return sum
7     }
8     sumOf()
9     sumOf(numbers: 42, 597, 12)

函數裏面可以嵌套函數。

1     func returnFifteen() -> Int {
2         var y = 10
3         func add() {
4             y += 5
5         }
6         add()
7         return y
8     }
9     returnFifteen()

函數可以作為另一個函數的類型

1     func makeIncrementer() -> ((Int) -> Int) {
2         func addOne(number: Int) -> Int {
3             return 1 + number
4         }
5         return addOne
6     }
7     var increment = makeIncrementer()
8     increment(7)

函數可以作為另一個函數的參數

 1     func hasAnyMatches(list: [Int], condition: (Int) -> Bool) -> Bool {
 2         for item in list {
 3             if condition(item) {
 4                 return true
 5             }
 6         }
 7         return false
 8     }
 9     func lessThanTen(number: Int) -> Bool {
10         return number < 10
11     }
12     var numbers = [20, 19, 7, 12]
13     hasAnyMatches(list: numbers, condition: lessThanTen)

二、閉包(closures) 函數是閉包的的一種特殊情況:代碼塊延時調用。

可以用大括號 {} 寫一個閉包。 使用 "in" 把閉包參數和返回值從閉包體區分開來。

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

可以更簡單,功能一樣。

    let mappedNumbers = numbers.map({ number in 3 * number })
    print(mappedNumbers)

可以使用數值下標代替名字訪問參數,這個對於簡短的閉包很有用。

當一個閉包是函數的唯一參數,可以省略圓括號。

    let sortedNumbers = numbers.sorted { $0 > $1 }
    print(sortedNumbers)

嗯,努力!

iOS-swift-函數和閉包