使用@autoclosure提高Swift代码质量

简介: 在Swift中方法终于成为了“一等公民”,可以作为参数被方法利用,在接触今天的内容之前,你必须了解Swift中方法和闭包的概念。

在Swift中方法终于成为了“一等公民”,可以作为参数被方法利用,在接触今天的内容之前,你必须了解Swift中方法和闭包的概念。Swift支持方法嵌套,Swift中的方法和闭包在类型上是有区别的。也就是说传入方法类型的参数也可以接收闭包,可是方法只能传入匹配方法返回值类型的参数,也就是说在运行方法前需要先执行参数中的方法算出返回值在传入参数运行调用该参数的方法,如果在一个方法中使用了多个判断语句可以提前中断,那么很多时候不需要知道后面的参数的具体值,比如下面的例子

 func expensiveMethod() -> Bool{
    NSThread.sleepForTimeInterval(10.0)
    println("执行了很久")
    return true
    }

另外一个方法and需要传入两个Bool类型的参数:

 func and(first:Bool,second:Bool)->Bool{
    println("执行and方法")
    return first&&second
    }

现在调用试试:

let result = and(false, second: expensiveMethod())

你会发现速度非常的慢,这是因为先运行expensiveMethod方法算出了返回值再去执行and方法的方法体。中控台打印:
执行了很久
执行and方法
而可能and方法的结果只通过第一个参数就可以执行了,这时候更好的办法是把第二个参数改为返回Bool类型的方法,然后传入一个闭包:

    func and(first:Bool,getSecond:()->Bool)->Bool{
        if !first{
        return false
        }else{
        return getSecond()
        }
    }

调用的方法也要修改:

let result = and(false, getSecond: { return self.expensiveMethod()})

这样的修改运行速度变快了,但是程序员使用这个API的时候需要写完整的闭包结构,比较麻烦,这个时候@autoclosure就派上用场了。使用这个修饰符可以使API调用时输入返回值即可:

 func and(first:Bool,@autoclosure getSecond:()->Bool)->Bool{
        if !first{
        return false
        }else{
        return getSecond()
        }
    }

这样在调用时就可以简化输入了:

let result = and(false, getSecond: expensiveMethod())

要注意的是@autoclosure只能用在()->T这样无参数的闭包中

目录
相关文章
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
93 2
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
200 2
|
3月前
|
监控 Swift iOS开发
局域网计算机监控软件中利用Swift构建iOS端的移动监控应用
在局域网计算机监控软件的开发中,构建iOS端的移动监控应用是一项关键任务。本文将介绍如何利用Swift语言实现这一目标,通过多个代码示例展示关键功能的实现。
225 1
|
3月前
|
安全 JavaScript 前端开发
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
IOS开发基础知识:介绍一下 Swift 和 Objective-C,它们之间有什么区别?
67 0
|
5月前
|
JavaScript 前端开发 PHP
用swift开发ios移动端app应用初体验
直接跟着 apple 官方的 SwiftUI 教程跑的,写惯了 javascript 奔放的代码,很多语法理解起来还是有点费劲
58 1
|
7月前
|
Swift iOS开发
iOS OC混编Swift 后者无法走断点
iOS OC混编Swift 后者无法走断点
49 0
|
Swift iOS开发
IOS使用Swift加载Xib文件
IOS使用Swift加载Xib文件
260 0
|
Swift iOS开发
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
219 0
iOS开发 - 适合工程多环境切换(swift环境),适合经常打很多不同环境包的人
|
Swift 数据安全/隐私保护 iOS开发
iOS开发 - swift通过Alamofire实现https通信
iOS开发 - swift通过Alamofire实现https通信
346 0
iOS开发 - swift通过Alamofire实现https通信
|
Swift iOS开发 容器
iOS 仿支付宝银行卡界面(支持Swift/OC)
在有支付相关的APP中,都有对应的钱包,虽然现在的支付宝,微信支付很流行,但是都是需要绑定自己的银行卡,那么这个银行卡的卡包页面该怎么实现呢?在网上找了许久也没有找到合适的,那就索性自己造轮子。
324 0

相关课程

更多