Когда вы делаете асинхронные вызовы, вам нужно подождать, пока асинхронный вызов не закончится, и после этого вы сможете работать с полученными данными.Для этого мы используем обработчики завершения в Swift.
Начните с объявления параметра завершения вместо возвращаемого значения
func getMessagingId(completion: @escaping (String) -> ())
Что это значит?
Упрощенно, вы объявляете, что должно произойти, когда из этого метода вызывается completion
.Вы хотите передать параметр типа String
, который вы можете использовать при закрытии completion
, а затем вы хотите вызвать код внутри completion
замыкания
Так что теперь давайте вызовем наши completion
ив качестве параметра давайте передадим наше сообщение
if let error = error {
completion("Error fetching messaging id: \(error)")
} else if let result = result {
completion("Messaging id is \(result.token)")
}
Хорошо, теперь давайте вызовем наш метод
getMessagingId { message in // here you give `String` parameter name
print(message) // this code gets executed when you call `completion` in `getMessagingId`
}
Теперь, когда вы сможете это понять, вы можете передать несколько параметров, напримернапример success
, error
, messageId
, все, что вам нужно ...