Swift_闭包(Closure)

闭包(Closure)

在Swift语言中,不再拥有Block这种语法,取而代之的是闭包。
在本人看来,大体功能是一样的,只是名字变了,语法变了而已。
没有想象的那么复杂,come on baby! 


简单语法

声明闭包变量,有两个Int参数,有一个Int返回值,实现求和
var sumClosure: ((Int, Int) -> Int)! = nil
给闭包变量赋值,有如下几种写法
// 方式1:带有参数名,参数类型,返回值类型
sumClosure = { (a: Int, b: Int) -> Int in
    return a + b
}

// 方式2:省略参数类型
sumClosure = { (a, b) -> Int in
    return a + b
}

// 方式3:省略返回值类型
sumClosure = { (a, b) in
    return a + b
}

// 方式4:省略参数的小括号
sumClosure = { a, b in
    return a + b
}

// 方式5:省略参数名
sumClosure = {
    return $0 + $1
}

// 方式6:省略return关键字
sumClosure = {
    $0 + $1
}
调用
// 就像函数一样使用,该传参传参,该接收结果就接收结果
let res = sumClosure(10, 20)
print(res)



给闭包起别名

起别名
// 给无参无返回值的闭包起别名
typealias ClosureName1 = () -> Void

// 给有两个字符串参数和无返回值的闭包起别名
typealias ClosureName2 = (String, String) -> Void

// 给有两个浮点型参数和一个浮点型返回值的闭包起别名
typealias ClosureName3 = (a: Float, b: Float) -> Float

// 给有两个整型参数和两个整形返回值的闭包起别名(返回值是元组)
typealias ClosureName4 = (Int, Int) -> (Int, Int)
使用别名从而简便定义闭包变量
// 使用别名,声明闭包变量
let closure2: ClosureName4 = { (a: Int, b: Int) -> (Int, Int) in
    return (a + b, a - b)
}

// 闭包的使用
let res2 = closure2(10, 20)
print("sum: \(res2.0)  diff: \(res2.1)")



闭包作为函数参数

带有闭包参数的方法定义
func function1(closure: ClosureName1) {
    print("closure before")

    // 调用闭包
    closure()

    print("closure after")
}
带有闭包参数的方法的使用
function1 { () -> Void in
    print("~~~~~~~~~~~~")
    print("closure body")
    print("~~~~~~~~~~~~")
}


在Swift中,我们使用闭包可以实现各种的回调,对我们的程序帮助很大,很多可以使用代理的地方,都可以使用闭包代替,希望大家活学活用


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值