- 函数
函数声明格式:
func 函数名(参数名称1:类型,参数名称2: 类型...)-> 返回类型{}
func <#name#>(<#parameters#>) -> <#return type#> {
<#function body#>
}
func greet(person: String, day: String) -> String {
return "Hello \(person), today is \(day)"
}
greet(person: "Marry", day: "Sunday")
- 嵌套函数
访问外部函数声明的变量:
func returnFifteen() -> Int {
var y = 10
func add() {
y += 5
}
add()
return y
}
returnFifteen()
一个函数返回值可以是另一个函数:
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(list: numbers, condition: lessThanTen)
- 输入输出参数
一般情况下不允许修改函数参数的值,试图在函数体中更改参数值将编译错误。如果要修改参数的值,需要在函数定义时,使用inout关键字;在函数调用时,参数名前加 “&”:
func swap(first a : inout Int, second b : inout Int){
let temp = a
a = b
b = temp
}
var x1 = 10,y1 = 20
swap (first: &x1, second: &y1)
print(x1, y1)
- 可变参数
可变参数可以接受0个或多个值,需要在函数定义参数时类型的后面加“...”
func arithmeticMean(_ numbers: Double...) -> Double {
var total: Double = 0
for number in numbers {
total += number
}
return total / Double(numbers.count)
}
arithmeticMean(1, 2, 3, 4, 5)
// returns 3.0
arithmeticMean(3, 8.25, 18.75)
// returns 10.0
- 闭包
函数实际上是闭包的一种特殊情况:可以稍后调用的代码块。闭包是自包含的功能块,可以在代码中传递和使用。全局和嵌套函数实际上也是特殊的闭包,闭包采取如下三种形式之一:
-
全局函数是一个有名字但不会捕获任何值的闭包;
-
嵌套函数是一个有名字并可以捕获其封闭函数域内值的闭包;
-
闭包表达式是一个利用轻量级语法所写的可以捕获其上下文中变量或常量值的没有名字的闭包。
闭包表达式的格式:{(参数) ->返回类型 in 声明 }
实例:
numbers.map({(number: Int) -> Int
in let result = 3 * number
return result
})
网友评论