Swift小结函数和闭包

来源:互联网 发布:电子琴节奏软件 编辑:程序博客网 时间:2024/05/16 23:49

我们使用func 来声明一个函数,使用名字和参数来调用函数。使用 -> 来指定函数返回值如下代码:

func demo(name: String, day: String) -> String {
return “Hello (name), today is (day).”
}
demo(“zhangsan”, “Tuesday”)

我们也可以使用元组来让一个函数返回多个值。该元组的元素可以用名称或数字来表示如下代码:

func demoStatistics(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 = demoStatistics([5, 3, 100, 3, 9])
statistics.sum
statistics.2

函数可以带有可变个数的参数,可变参数上面我们也已经提到过了,大家也不陌生了,这些参数在函数内表现为数组的形式如下代码:

func demoOf(numbers: Int…) -> Int {
var sum = 0
for number in numbers {
sum += number
}
return sum
}
demoOf()
demoOf(32, 697, 22)

函数对我们来说已不再陌生了,swift语言函数可以嵌套。被嵌套的函数可以访问外侧函数的变量,你可以使用嵌套函数来重构一个太长或者太复杂的函数如下代码:

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

我们接下来就来了解一下,如果函数是第一等类型,这意味着函数可以作为另一个函数的返回值如下代码:

func demoReturn() -> (Int -> Int) {
func addOne(number: Int) -> Int {
return 1 + number
}
return addOne
}
var increment = demoReturn()
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)

我们所学习的函数实际上是一种特殊的闭包,我们可以使用 {} 来创建一个匿名闭包。使用 in 将参数和返回值类型声明与闭包函数体进行分离如下代码:

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

我们有很多种创建闭包的方法。如果一个闭包的类型已知,比如作为一个回调函数,你可以忽略参数的类型和返回值。单个语句闭包会把它语句的值当做结果返回如下代码:

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

你可以通过参数位置而不是参数名字来引用参数——这个方法在非常短的闭包中非常有用。当一个闭包作为最后一个参数传给一个函数的时候,它可以直接跟在括号后面如下代码:

let demoNumbers = sorted(numbers) { 0>1 }
demoNumbers

0 0