2016-03-08 182 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} 
相關問題