Как обойти проблему асинхронного кода в Swift?
В теории я понимаю как это работает. Но на практике с такими проблемами не встречался. Какое решение может мне помочь в данной ситуации?
class ToDoNetworking {
var getData: [ToDo] {
fetchToDos()
}
func fetchToDos() -> [ToDo] {
print("START")
var returnArr: [ToDo] = []
let request = Session.default.request("http://localhost:3003/")
request.responseDecodable(of: ToDos.self) { (response) in
switch response.result {
case .success(let tasks):
returnArr = tasks.items
print("FILLED UP")
case .failure(let error):
print("FAILED to FETCH JSON: \(error.localizedDescription)")
}
}
print("END")
return returnArr
}
}
console:
START
END
FILLED UP
Ответы (1 шт):
Автор решения: schmidt9
→ Ссылка
Вам можно использовать здесь completion handler
class ToDoNetworking {
typealias DataCompletionHandler = ([ToDo]) -> Void
func getData(_ completionHandler: DataCompletionHandler) {
fetchToDos { result in
completionHandler(result)
}
}
func fetchToDos(_ completionHandler: DataCompletionHandler) {
print("START")
var returnArr: [ToDo] = []
let request = Session.default.request("http://localhost:3003/")
request.responseDecodable(of: ToDos.self) { (response) in
switch response.result {
case .success(let tasks):
returnArr = tasks.items
completionHandler(returnArr)
print("FILLED UP")
case .failure(let error):
print("FAILED to FETCH JSON: \(error.localizedDescription)")
}
}
print("END")
}
}