Я недавно начал работать в Аламофайре. Я хочу использовать Alamofire для отправки простого запроса GET:
import Alamofire
class Test{
var url:String = "www.github.com"
var i: Int = 1
func change(){
Alamofire.request(url, method:.get).responseString { response in
self.i += 1
print(self.i)
}
print(i)
}
}
Я хочу изменить свойство i
класса Test с 1 на 2 в вызове функции Alamofire. И распечатайте результаты на консоли, чтобы увидеть, что произойдет. Я ожидаю, что результат будет
2 2
но реальный выход
1 2
!! Я так смущен этим результатом. Почему это не 2 2
или 2 1
, а 1 2
? что на самом деле произошло во время вызова функции? Почему нельзя поменять недвижимость?
это ближе будет выполнено через некоторое время (когда сервер ответит)
реальный выход реальный !!
Запрос работает асинхронно. Ответ приходит намного позже.
вам нужно понять threading
и async
по сравнению с sync
@SPatel Спасибо за вашу помощь. Я ошибся, что он будет работать пошагово (код за кодом).
Поскольку запрос Alamofire является асинхронным, функция print(i)
выполняется до print(self.i)
. Вы можете добиться желаемого, дождавшись результата Alamofire с DispatchGroup()
. Однако я не рекомендую это делать.
Вы можете получить больше информации об использовании Dispatch на Alamofire:
Почему это плохой подход @Rob очень четко ответил на это сообщение ниже:
{ответ в self.i + = 1 print (self.i)}