예제 코드) 버튼을 누르면 TodoList 데이터를 받고 Label에서 보여주는 예제입니다. (데이터가 많은 관계로 예시에서는 TodoList의 마지막 요소만 보여줍니다.)
await
는 말 그대로 '기다리다'는 뜻으로 비동기 함수 호출 시 중단 시점입니다.requestData
는 RequestTodoList() 메서드로 [Todo]
를 받을 때까지 기다리겠다는 의미입니다. (받지 못할 수 있으니까 do -catch
문으로 에러 처리!)final class RequestTodoList {
private let todoUrl = URL(string: "https://jsonplaceholder.typicode.com/todos")!
func getTodoList() async -> [Todo] {
do {
let requestData = try await RequestTodoList()
return requestData
} catch {
print("error: \(error.localizedDescription)")
return []
}
}
}
private extension RequestTodoList {
func RequestTodoList() async throws -> [Todo] {
do {
return try await AF.request(todoUrl).serializingDecodable().value
} catch {
throw error
}
}
}
Task
로 묶어서 async
메서드 호출class ViewController: UIViewController {
@IBOutlet weak var TodoLabel: UILabel! // 요청 후 받은 TodoList를 보기 위한 Label
let viewModel = RequestTodoList()
@IBAction func getRequest(_ sender: UIButton) { // 버튼을 클릭하면 TodoList를 가져옵니다.
Task {
let todos = await viewModel.getTodoList()
guard let todo_last = todos.last else { return }
TodoLabel.text = "\(todo_last)"
}
}
}