Swift中@autoclosure

我们先看一个例子

func or(first:Bool,second:()->Bool) -> Bool {
    if first {
        return true
    }
    else {
        return second()
    }
}

我这里定义了一个函数,函数有两个参数,第一个是一个Bool值,第二个参数是()->T这样一个无参数的闭包。我们用此函数对或运算进行模拟。

来看下调用

正常调用

or(2>3) { () -> Bool in
    return 4 > 3
}//等价于(2>3)|| (4>3),返回结果为true

正常情况下我们根据xcode提示,直接回车的话是这样调用的,但是这什么鸟玩意,长这么丑,我只不过是求个或运算,长这么丑,谁看的出来这是或运算。但是我们可以简化下

简化版

or(2>3, second: {4>3})

貌似好看了许多,但是看着还是这么别扭,尤其是我这种OC观念很深的人,这什么玩意,小括号套大括号的。还是很难看。

这时候我们可以用到我们的@autoclosure了

@autoclosure

在闭包前面加上@autoclosure

func or(first:Bool,@autoclosure second:()->Bool) -> Bool {
    if first {
        return true
    }
    else {
        return second()
    }
}

再来看下调用

or(2>3,second: 4>3)

这看起来既干净又方便理解,一看就知道2>3与4>3进行或运算。

@autoclosure:Apple为了让语法看起来更漂亮些,在Swift中为我们提供了这么一个神奇的东西@autoclosure,他可以让我们的表达式自动封装成一个闭包。

截图

看下在Playground的执行情况

Swift中@autoclosure_第1张图片
or.gif

注意

@autoclosure只适用于这样的()->T无参闭包。

你可能感兴趣的:(Swift中@autoclosure)