闭合周围的括号是什么意思?

时间:2016-03-08 22:02:01

标签: swift

我正在尝试了解此自定义导航栏/分页视图的工作原理,找到here。当我浏览README时,让我沮丧的是设置类似火种的自定义行为:

// Tinder Like
controller?.pagingViewMoving = ({ subviews in
    for v in subviews {
        var lbl = v as UIImageView
        var c = gray

        if(lbl.frame.origin.x > 45 && lbl.frame.origin.x < 145) {
            c = self.gradient(Double(lbl.frame.origin.x), topX: Double(46), bottomX: Double(144), initC: orange, goal: gray)
        }
        else if (lbl.frame.origin.x > 145 && lbl.frame.origin.x < 245) {
            c = self.gradient(Double(lbl.frame.origin.x), topX: Double(146), bottomX: Double(244), initC: gray, goal: orange)
        }
        else if(lbl.frame.origin.x == 145){
            c = orange
        }
        lbl.tintColor = c
    }
})

我不明白为什么闭包周围的括号被设置为控制器?.pagingViewMoving属性。

当我查看SLPagingViewSwift.swift文件时,.pagingViewMoving属性设置为此别名:

public typealias SLPagingViewMoving = ((subviews: [UIView])-> ())

在函数类型之外做什么额外的括号?

1 个答案:

答案 0 :(得分:4)

在这种情况下,括号纯粹是为了清晰而且是不必要的。就像说let a = (2 + 2)一样。虽然这不应该与在下列情况下作为参数提供的闭包相混淆。

如果一个函数本身接受一个闭包的参数,那么闭包就在包含函数参数的括号内。

所以感谢语法高阶函数,它将闭包作为最后(或唯一)参数,以两种方式表示 - 在参数括号内或者作为尾随闭包。考虑以下功能:

func foo(bar: (Int -> Int)) {...}

它可以通过两种方式调用 - 首先在括号中使用闭包,如下所示:

foo({(i) in i + 2})

或作为尾随封闭:

foo {(i) in i + 2}