2016-12-15 50 views
0

我有一個很大的方法,做一些加載和計算,因此它顯示一個活動指標視圖來通知他們應該等待的用戶。邏輯非常複雜,因此有4個地方的數據處理可能會中斷或返回(所有事情都是在關閉時完成的)。反正,我不想再重複這樣的代碼:Swift 3嵌套函數與閉包

DispatchQueue.main.async { 
    activityView.hide() 
    activityView.removeFromSuperview() 
} 

在4個地方,所以我計算過,我會寫一個嵌套函數:

func removeActivityView() { 
    DispatchQueue.main.async { 
     activityView.hide() 
     activityView.removeFromSuperview() 
    } 
} 

,但後來我意識到,在斯威夫特我也可以這樣做:

let removeActivityView = { 
    DispatchQueue.main.async { 
     activityView.hide() 
     activityView.removeFromSuperview() 
    } 
} 

這正好用同樣的方式和不完全一樣但從用戶的角度。

那麼一種方法和另一種方法之間的實際區別是什麼?

回答

3

在這種情況下它們是相同的。在Swift中:

嵌套函數是具有名稱並可從其封閉函數捕獲值的閉包。

Source

其實,你也可以這樣做:

func foo() { 
    print("Foo!") 
} 
let bar = foo 

現在foo()bar()會產生相同的結果。這可以爲任何不帶參數的函數完成。

我不知道如何/如果編譯器區分這兩個。如果有人有更多的信息,我會非常感興趣!