2016-06-23 73 views
2

我閱讀Swinject文檔,我不要在此代碼明白兩兩件事:如何將兩個閉包獨自站立和方法調用沒有內嵌斯威夫特 - 封閉模式

let container = Container() 
container.register(AnimalType.self) { _ in Cat(name: "Mimi") } 
container.register(PersonType.self) { r in 
    PetOwner(pet: r.resolve(AnimalType.self)!) 
} 

? 關閉沒有返回任何對象,我沒有看到任何'返回'。那麼容器如何獲得「Cat」實例呢? (還有PetOwner實例)。

謝謝

+2

參見[上斯威夫特關閉文檔] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html) - 特別是關於「來自單一表達式閉包的隱式返回」和[「追蹤閉包」](https ://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Closures.html#//apple_ref/doc/uid/TP40014097-CH11-ID102) – Hamish

+1

@ originaluser2謝謝,非常完美! – NathanVss

回答

4
  1. 「兩個閉包獨自站立和方法調用沒有內嵌」

這就是所謂的 「後關閉」:

如果你需要將一個閉包表達式作爲函數的最後一個參數傳遞給一個函數,並且閉包表達式很長,將它寫成一個traili會很有用而不是關閉。甲後閉合是外(和之後)寫入的函數的括號稱之爲支持閉合表達式...

來源:Apple's documentation

  • 「的倒閉不會返回任何對象,我沒有看到任何‘返回’」
  • 該功能被稱爲「隱性收益」:

    單封表達可以通過省略從他們的聲明return關鍵字隱含返回其單一的表達的結果...

    來源:Apple's documentation

    +1

    謝謝,這是正確的;) – NathanVss