Как дождаться выполнения функции
Иммеется такой код:
struct ContentView: View {
@EnvironmentObject var appState: AppState
var body: some View {
Button(action: {
var s = RunQuery() //В функции RunQuery() выполняется запрос, после его выполнения запускается
//функция Singleton.setParam(value: "test", key: "keyWord")
if(Singleton.getParam(key: "keyWord")) {
print("Yes")
} else {
print("No")
}
})
}
}
Проблема в том, что когда в первый раз нажимаю на кнопку в функции не успевает выполниться запрос и записаться значение и поэтому выводится No. При повторном нажатии выводится Yes, так как значение уже записано с того раза. Как правильно сделать, что бы сперва отобразился Yes
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
Могу предложить использование колбеков, и вы сможете подцепиться к выполнению метода напрямую. Вот например:
func getBoolValue(number : Int, completion: (Bool)->()) {
if number > 5 {
completion(true)
} else {
completion(false)
}
}
getBoolValue(number: 2) { (result) -> () in
// do stuff with the result
print(result)
}
вы же будете возвращать тип который вам нужен. Вот есть примеры как с этим можно работать. Если же речь идет о запросах, то стоит посмотреть в стороне асинхронности, чтобы не блокировать UI в ожиданиях.