2015-05-26 24 views
1

我有2個函數(func A()和func B())。我想知道如何讓函數B在繼續之前等待函數A執行。我做了大量的閱讀,並且知道我們可以用異步編程和信號量,或者使用dispatch_barrier_sync等函數來完成它。但是,我很快就會發現,並不瞭解如何編寫代碼。如果有人能幫忙,我會很感激。使用調度,異步編程使代碼塊等待

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
A() 
B() 

} 
+0

你在做什麼功能a你能分享嗎? – abhishekkharwar

+0

在函數A和B中,我正在查詢我的Parse數據庫 – abcd123

+0

Parse的方法在操作完成時包含回調函數。你最好從那裏調用你的函數。 – Mark

回答

1
func a(completion:()->Void){ 
    let query:PFQuery = PFQuery(className: "GameScore") 
    query.getObjectInBackgroundWithId("xWMyZ4YEGZ", block: { (object, error) -> Void in 
    if let object = object{ 
     completion() 
    } 
    }) 
} 

func b(){ 
    //get your other object 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    a(){() -> Void in 
    //Call B when A is completed 
    b() 
    } 
} 

這裏我們添加一個完成塊功能A.
我們稱此塊當對象被返回。
當我們調用函數A時,我們使用{() -> Void in ……}僅在函數A完成時才執行代碼。

(代碼abhishekkarwar

+0

感謝您的迴應!我在哪裏添加我的代碼的其餘部分在函數A中的查詢?如果錯誤== nil {對於對象中的對象{ – abcd123

+0

也我正在使用findObjectsInBackgroundWithBlock,所以我的代碼看起來像這樣︰findObjectsInBackgroundWithBlock(block:{(object,error) - >如果讓我們在 無效object = object { completion() } }) – abcd123

0

//請轉換婁代碼在迅速

- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 

[self functionAWithCompletion:^(){ 
    //After completion of a cal b function 
    [self functionB]; 
}]; 

} 

- (void)functionAWithCompletion:(void (^)())completion{ 

PFQuery *query = [PFQuery queryWithClassName:@"GameScore"]; 
[query getObjectInBackgroundWithId:@"xWMyZ4YEGZ" block:^(PFObject *gameScore, NSError *error) { 

    completion(); 
}]; 

} 

- (void)functionb{ 


}