SwiftUI内功之 Closesure和escaping是什么有什么用

Closure 是什么

Closure闭包实在是太有用了!您可能已经知道这一点,但是闭包是您可以传递的代码块,并可以在代码的其他地方使用

Closure使命就是让代码紧凑且模块化

就像可以分配给变量的函数一样。您可以在代码中四处移动变量,并在以后调用闭包的代码。

let closure = { (name:String) -> String in
    return "Hello, \(name)!"
}

let message = closure("Bob")
print(message)

在上面的示例中,常量闭包包含一个闭包。此闭包采用一个称为String类型名称的参数。然后,闭包本身返回一个字符串-各种各样的问候。

在上述示例中,当使用closure(“ Bob”)调用闭包时,其值将分配给常量消息并打印出来。

闭包的常见用例是所谓的完成处理程序。

假设您要从网络下载要显示在视图控制器中的图像。使用Alamofire(Swift的流行网络和Web请求库),您的代码应如下所示:

Alamofire.request(imageURL).responseData {
    response in

    if let data = response.result.value {
        self.imageView?.image = UIImage(data: data)
    }
}  

如您所见,发出了一个Web请求,该请求已链接到对函数responseData(queue:completionHandler :)的调用。只有一个参数提供给该函数-一个闭包。

在闭包内部,将响应展开,并将其数据用于将图像数据分配给属性imageView。

此关闭是完成处理程序。当下载图片的请求完成时执行。换句话说:您可以使用闭包来确定特定动作完成后会发生什么(因此称为“完成处理程序”)。

封闭功能非常强大。在上面的示例中,闭包与请求发送到Web图像的位置相同,并且与imageView属性(和出口)位于相同的文件中。

实际下载图像并对其进行处理的代码在项目的其他位置,完全不同的位置。多亏了闭包,我们可以传递功能,保持关注点分离以及使我们的代码紧凑而模块化。

Closure与escapeing关系

出于性能方面的考虑,Swift假定所有闭包都是不冒号的闭包,这意味着它们将在函数内部立即使用而不被存储,这反过来意味着Swift不会触及引用计数。如果不是这种情况(如果您采取了任何措施来存储闭包),那么Swift将迫使您将其标记为@escapeing,以便必须更改引用计数。

推荐

基础文章推荐

经典教程推荐

技术源码推荐

推荐文章

CoreData篇

TextField篇

JSON文件篇


一篇文章系列

技术交流

QQ:3365059189
SwiftUI技术交流QQ群:518696470

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

知识大胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值