2017-01-11 64 views
0

我有一個類來存儲用戶地理信息&獲取位置等。這個類對象用在我的Home ViewController中。對象函數後的Swift回調

實施例:

class Geo { 

    ... 
    getLocation() 
    getRoute() 
    ... 

} 

class ViewController { 
    var geo = Geo() 
    geo.getRoute() 

    // I want a call a function after getRoute is complete. 
} 

一種方法我知道使用委託,其中我的ViewController是地理位置類對象的委託。但是有沒有簡單的方法,導致Geo對象的任何方法都會被app中的任何控制器使用。

+0

使用completionHandler。 –

回答

3

正如評論中的建議,你可以通過函數getRoute在完成時調用它。你將不得不的getRoute聲明更改爲類似

func getRoute(_ completionHandler: (() -> Void)?) {...} 

,然後在getRoute實現通話結束:

if let completion = completionHandler { 
    completion() 
} 

,當你調用getRoute你只需要通過功能你想要被稱爲最後一個參數:

geo.getRoute() { 
    // do something when getRoute is finished 
} 
+0

謝謝,你的答案對我有用!我還有一個問題,在另一個地方,當我使用相同的代碼時,它不起作用,導致主函數將控制權交給位置委託。當控制傳遞給其他異步函數時如何處理這種情況。 – demonofthemist

+0

你可以舉一個例子來說明一下這個代碼的作用,然後對這些代碼做一些更具體的描述。 (如果新問題與這個問題有所不同,或者只是編輯這個問題(如果它們幾乎相同),可能甚至會問一個新的SO問題) – Keiwan

相關問題