URLSession
выполняет вещи в фоновых потоках.И когда вы завершаете основной поток многопоточной программы, все потоки завершаются (за исключением того, что в некоторых языках, таких как Java, вы можете установить поток Daemon, который может быть другим потоком, но завершение программы будет после его окончания).вместо этого).
Итак, ваше решение - продлить срок службы вашего основного потока, например:
let group = DispatchGroup.init()
group.enter() // Use this before making anything that needs to be waited for
// This manually add one to operation count in the dispatch group
URLSession.shared.dataTask(with: request, completionHandler: { data, response, error -> Void in
defer { // Defer makes all ends of this scope make something, here we want to leave the dispatch.
// This is executed when the scope ends, even if with exception.
group.leave() // Manually subtract one from the operation count
}
print(response!)
do {
let json = try JSONSerialization.jsonObject(with: data!)
print(json)
print("we did it!")
} catch {
print("error")
}
}).resume()
group.wait() // Wait for group to end operations.
Но тем лучше, что вы не блокируете основной поток вВ реальных приложениях, таких как, например, веб-приложения, ваше приложение обычно живет больше, чем запросы, поэтому вам не нужно вмешиваться, но старайтесь не блокировать пользователя (sleep
, DispatchGroup.wait
, за исключением случаев, когда используется фоновый поток и т. д.)....)