Swift Section Four(函数与闭包)

函数与闭包


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165

//: Playground - noun: a place where people can play

import UIKit

//swift 第四课 函数与闭包

//1.函数的用法
func greet(name: String, day: String) ->String {

return "Hello \(name), today is \(day)"

}

greet("Bob","Tuesday")


//2.多返回值的函数
func calculateStatistics(scores: [Int]) ->(min: Int, max: Int, sum: Int){

var min = scores[0]

var max = scores[0]

var sum = 0

for score in scores{

if score > max {

max = score

}else if score < min{

min = score

}

sum += score

}

return (min, max, sum)

}

let statistics = calculateStatistics([5, 3, 100, 3, 9])

print(statistics.sum)

print(statistics.2)

//3.不限参数个数的函数
func sumOf(numbers: Int...) -> Int {

var sum = 0

for number in numbers{

sum += number

}

return sum

}

sumOf()

sumOf(42, 597, 12)

//4.嵌套函数
func returnFifteen() -> Int{

var y = 10

func add(){

y += 5

}

add()

return y

}

returnFifteen()

//5.函数可以作为函数的返回值
func makeIncrementer() -> (Int -> Int){

func addOne(number: Int) -> Int {

return 1 + number

}

return addOne

}

var increment = makeIncrementer()

increment(7)

//5.函数也可以作为函数的参数
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, 5, 12]

hasAnyMatches(numbers, lessThanTen)


//6.闭包的使用
//首先介绍一下map方法的定义:返回一个数组,这个数组内的元素是原数组经过闭包函数计算返回的值

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)

源代码请前往我的github

Comments