swift (二) 函数 闭包

22 阅读1分钟

函数

最简单的函数,没有参数和返回值。

func hello(){
    print("Hello")
}
// 这个也可以写成返回void类型
func hello1() -> Void{
    print("hello1")
}

hello()
hello1()

带参数和返回值的函数

// 带参数
func hello(to:String){
    print("hello ", to)
}
hello(to: "张三")

// 带返回值
func hello1(to:String) -> String {
    return "hello " + to
}
hello1(to: "李四")

省略return

// 如果只有一句代码,可以省略return
func hello(to:String) -> String {
    "hello " + to
}
let res = hello(to: "李四")
print(res)

参数标签

// 参数标签
func myAdd(first a:Int, second b:Int){
    print(a + b)
}
myAdd(first: 10, second: 20)

// 也可以下划线
func myAdd1(_ a:Int, b:Int) {
    print(a + b)
}
myAdd1(10, b: 20)

不定长参数

不定长参数的后面的参数不能用下划线

func hello(to:String... ,begin:String = "welecome") {
    var content = begin
    for i in to{
        content += i
    }
    print(content)
}
hello(to: "小王", "小张")

hello(to: "李白","杜甫", begin: "欢迎")

inout

func swap(a:inout Int, b:inout Int){
    let temp = a
    a = b
    b = temp
}
var a = 10
var b = 20
swap(a: &a, b: &b)
print(a, b)

闭包

// 闭包的使用
/*
 { (参数列表) -> (返回值) in
    闭包的代码
 }
 */

let a = { (a:Int , b:Int) -> Int in
    a + b
}
let b = { (a:Int, b:Int) -> Int in
    a * b
}
var count = 1000
let c = { (a:Int) -> Int in
    count += 1
    return count
}
print(a(10,20))
print(b(10,20))
print(c(0))
print(c(0))

尾随闭包

let a = { (a:Int , b:Int) -> Int in
    a + b
}

func hello(a: (Int, Int) -> Int) {

}

//尾随闭包,最后一个参数是一个闭包,可以直接写大括号里面
hello { a, b in
    return a + b
}