2016-12-03 85 views
2

在我正在处理的聊天应用程序中,我需要将从联系人拍摄的电话号码发送到API,并检索已经在应用程序中注册的号码。递归调用闭包

由于联系人列表可能很长,我打算分批发送电话号码(每个请求20个)。并根据每个返回的响应更新UI。

private(set) var registeredContacts: [RegContact] = [] 

let phoneNumbersInBatches: [[String]] = [[]] 

for batch in phoneNumbersInBatches { 
    ApiClient.sharedInstance.getRegisteredContacts(from: batch) { contacts, error in 
     // Saving to database 
     // Update the UI 
     // ... 

     self.registeredContacts += contacts 
    } 
} 

我想发送每个批次一个接一个。换句话说,我希望这个过程如何进行。

发送批量 - >得到回应 - >更新UI(如果有注册用户) - >发送下一个批次 - > ...

但随着getRegisteredContacts是一个封闭的循环for只需将所有请求一个接一个地发送出去,而无需等待先前的请求完成。

一旦前一个请求完成,我该如何等待并激发每个后续请求?

+2

同步很少是一个好主意。你应该看看NSOperationQueue。 – Paulw11

回答

0

如果我没有得到它,你想是这样的:

sendNumbers(allNumbers) 

func sendNumbers(_ numbers:[], fromOffset offset: Int = 0) { 
    ApiClient.sharedInstance.getRegisteredContacts(from: batch) { contacts, error in 
     // Saving to database 
     // Update the UI 
     // ... 

     self.registeredContacts += contacts 
     offset += myValueForExample20 
     sendNumbers(numbers, fromOffset: offset) 
    } 
}