2016-03-08 178 views
1

我想了解这个自定义导航栏/分页视图的工作原理,发现here。什么是绊倒我,当我经历的自述就被设置火种般的定制行为:闭包的括号是什么意思?

// 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])->()) 

有哪些额外的括号做功能型外?

回答

4

在这种情况下,括号纯粹是为了清晰并且不必要。它就像是在说let a = (2 + 2)。尽管这不应该与下面案例中作为参数提供的封闭相混淆。

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

所以这要归功于采取了封闭物,这两种方式来表示他们的最后一次(或唯一的)参数的语法高阶函数 - 参数括号内或什么作为一个尾随封闭闻名。考虑下面的函数:

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

它可以以两种方式被称为 - 先用括号中的关闭,像这样:

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

或尾随封闭:

foo {(i) in i + 2} 
相关问题