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

Swift Section Three(分支和循环)

分支与循环


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

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

import UIKit

//Swift 第三课 分支与循环

//1.if else 与 for in 循环

let individualScores = [75, 43, 103, 87, 12]

var teamScore = 0

for score in individualScores {

if score > 50 {

teamScore += 3;

} else {

teamScore += 1;

}

}

print(teamScore)

//2.用"?"来声明可选变量

var optionalString: String? = "Hello"

print(optionalString == nil)

var optionalName: String? = "John Appleseed"

var greeting = "Hello!"

//3.用 if let 来进行快速判断可选变量是否为空

if let name = optionalName {

greeting = "Hello, \(name)"

}

//print(name) 请记住name并没有声明变量,它只在if let 作用域内有效

//4.switch用法

let vegetable = "red pepper"

switch vegetable {

case "celery":

let vegetableComment = "Add some raisins and make ants on a log."

case "cucumber","watercress":

let vegetableComment = "That would make a good tea sandwich."

case let x where x.hasSuffix("pepper"):

let vegetableComment = "Is it a spicy \(x)?"

default:

let vegetableComment = "Everything tastes good in soup."

}


//5.利用for in 快速遍历字典

let interestingNumbers = [

"Prime": [2, 3, 5, 7, 11, 13],

"Fibonacci": [1, 1, 2, 3, 5, 8],

"Square": [1, 4, 9, 16, 25]

]

var largest = 0

for (kind, numbers) in interestingNumbers{

for number in numbers{

if number > largest {

largest = number

}

}

}

print(largest)


//6.while repeat循环

var n = 2

while n < 100{

n = n * 2

}

print(n)


//var m = 2 //repeat这个语法可能被cut掉了,现在不能使用
//
//repeat{
//
// m = m * 2
//
//}while m < 100
//
//print(m)

//6. for 的简便写法

var firstForLoop = 0

for i in 0..<4 {

firstForLoop += i

}

print(firstForLoop)


var secondForLoop = 0

for var i = 0; i < 4; ++i {

secondForLoop += i

}

print(secondForLoop)

源代码请前往我的github

Comments

Swift Section Two(数组与字典)

数组与字典


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

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

import UIKit

//swift 第二课 数组与字典

//1.数组的声明

var shoppingList = ["catfish","water","tulips","blue paint"]

shoppingList[1] = "bottle of water"

print(shoppingList)

//2.字典的声明

var occupations = ["Malcolm":"Captain","Kaylee":"Mechanic"]

occupations["Jayne"] = "Public Relations"

print(occupations)

//3.空数组和空字典的声明

let emptyArray = [String]()

let emptyDictionary = [String : Float]()

//甚至你可以这样清空数组

shoppingList = []

occupations = [:]

源代码请前往我的github

Comments

Swift Section One(变量和常量)

变量和常量


由本文起始,我将持续推出对swift基本语法特性研究的文章,目的是加深自己的理解和记忆,文章以纯代码的形式编写,所有的特点及分析均展示在代码注释中。

Read More

Comments

swift做时间转换1990年4月15日为nil

先看一段代码:

swift:

1
2
3
4
5
6

var dateFormatter = NSDateFormatter()

dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"

let date = dateFormatter.dateFromString("1990-04-15 00:00:00")

运行上述代码之后你会神奇的发现, date 竟然是 nil ,而且 nil 的情况仅仅发生在1990年4月15日凌晨0点至1点之间。

Read More

Comments