Кросс-постинг от Apollo Spectrum Chat :
Привет! Вам нужно будет использовать закрытие завершения следующим образом:
static func checkUsername(nameUser: String!, completion: @escaping (Bool) -> Void) {
Network.shared.apollo.fetch(query: CheckUsernameQuery(username: nameUser)) { result in
switch result {
case .success(let response):
res = response.data?.checkUsername ?? false
completion(res)
case .failure(let error):
// whatever error handling you want to do
}
}
Закрытие - это функция, которую вы передаете в качестве параметра, а затем вызываете его с результатом асинхронно, а не возвращаете результат непосредственно из функция.
Это довольно распространенный шаблон в Swift - я бы порекомендовал прочитать его. Swift do c на затворах исключительно длинный и, вероятно, слишком детализированный в качестве отправной точки, но он охватывает тонну материала. Я думаю, что лучшая часть вступительного уровня - статья Джона Санделла о замыканиях .