Вы можете сохранить оба asyn c результаты вызова в качестве дополнительных свойств. Когда ваши обратные вызовы произойдут, установите эти свойства, а затем убедитесь, что оба свойства были установлены. Если они установлены, вы знаете, что оба асинхронных вызова c вернулись.
private var isFollowed: Bool?
private var count: Int?
func setUserFollowedState() {
following.load(for: userID, then: { [weak self, topic] result in
guard let self = self else { return }
let isFollowed = (try? result.get().contains(topic)) ?? false
self.isFollowed = isFollowed
performPostAsyncCallFunctionality()
})
}
func loadFollowersForTopic() {
followers.load(topic, then: { [weak self, topic] result in
guard let self = self else { return }
let count = (try? result.get().first(where: { $0.tag == topic })?.followers) ?? 0
self.count = count
performPostAsyncCallFunctionality()
})
}
private func performPostAsyncCallFunctionality() {
// Check that both values have been set.
guard let isFollowed = isFollowed, let count = count else { return }
// Both calls have returned, do what you need to do.
}
Хорошая особенность этого подхода заключается в том, что вы можете легко добавить больше асин c вызовов, используя шаблон. Тем не менее, если вам нужно сделать столько сетевых асинхронных вызовов c одновременно, я бы порекомендовал вам подумать о переписывании серверной логики c, поэтому для этой функции вам нужен только один сетевой вызов.