Вам нужен обработчик завершения, чтобы справиться с этим.Использование центра уведомлений просто усложняет вашу жизнь и может привести к неожиданному поведению.Вот пример кода:
func getHeartStroke(completionHandler: (_ heartStroke: [HeartStroke?], _ error: NSError?) -> ()) {
AF.request("http://localhost:8080/heartstroke", method: .get, headers: nil).responseJSON(completionHandler: {response in
if (response.error == nil)
{
let json = JSON(response.result.value!)
DispatchQueue.global(qos: .userInitiated).async {
guard let hearstrokeArray = try? JSONDecoder().decode([HeartStroke].self, from: json.rawData()) else{
debugPrint("An error has occurred")
return
}
completionHandler(hearstrokeArray, nil)
}
} else {
completionHandler(nil, response.error))
}
})
}
Затем вы можете назвать его так:
getHeartStroke { [weak self] (heartStrokeArray, error) in
guard let self = self else {return}
if error != nil {
self.processError(error)
} else {
self.processHeartStroke(heartStrokeArray)
}
}
processError и processHeartStroke будут функциями, которые вы должны создать для обработки объектов heartStrokeArray и error.
Это стандартные обратные вызовы или передача функций в функции.Многие курсы, которые вы находите в Интернете, похоже, игнорируют обратные вызовы, но определенно стоит потратить на них время.
Подробнее о замыканиях (завершениеHandler, как его здесь называют) можно узнать здесь: https://docs.swift.org/swift-book/LanguageGuide/Closures.html