嗯,你只需調用函數在異步回調結束。那就是當異步回調已經結束的時候 - 當異步回調的其他部分完成時!因此,舉例來說:
func myMethod() {
// ... code ...
somebody.doSomethingWith(someObject, asynchronousCallback: {
(thing, otherThing) in
// ... do whatever
// --> CALL THE FUNCTION!
})
// ... code ...
}
如果問題是,你不知道調用什麼功能,你可以配置你周圍的功能/對象,以便有人能手你的函數,而那什麼你在上面說的「調用函數」的地方打電話。
例如:
func myMethod(f:() ->()) { // we receive the function as parameter
// ... code ...
somebody.doSomethingWith(someObject, asynchronousCallback: {
(thing, otherThing) in
// ... do whatever
// --> CALL THE FUNCTION, by saying:
f()
})
// ... code ...
}
你能解釋一下如何交出功能?我事先明白,你運行函數的地方是你寫的「調用函數」,但函數,就像我說的,是在不同的文件中。我現在正在處理的具體情況是我編寫了一個函數,它首先檢查被查找的對象是否在本地數據存儲區中,如果沒有,則檢查服務器。因爲我希望它能在任何地方運行,所以我把它放在一個單獨的文件中。但是我仍然需要它在調用它的類中調用函數。再次感謝。 – Acoop
我當然可以解釋它_linguistically_。在Swift中,函數是一等公民,因此函數A可以將函數B傳遞給函數C,函數C可以存儲函數B.然後,函數C或其他訪問存儲函數B的函數可以調用函數B.這就是所有的回調工作。當你說'UIView.animateWithDuration(){...}'時,這就是你要交給Cocoa的一個函數 - 它將調用的函數來執行動畫。另請參閱我的書:http://www.apeth.com/swiftBook/ch02.html#_function_as_value – matt
但是,您如何選擇_architecturally_取決於您。在上面的例子中,'myMethod'可能需要一個函數作爲參數;然後在「調用函數」中,您調用它。但還有很多其他可能的情況。看到這個示例代碼的例子:https://github.com/mattneub/Programming-iOS-Book-Examples/blob/master/bk2ch24p842downloader/ch37p1099downloader/MyDownloader.swift – matt