WWDC iOS15의 URL을 다루는 영상을 바탕으로 비동기 await 대한 개념을 코드에 적용해보자
먼저 비동기 작업이 되야하는이유는 간단한다 API통신은 초당 16KBbyte 데이터를 주고받기때문에 그 크기이상의 데이터를 받아오는데는 Xcode 컴파일러가 모든 코드를 실행하는 속도보다 느리기떄문에 비동기방식으로 진행되야한다 .. await 키워드를 사용하고 특히 배열의 모든값을 불러올떄까지 기다리라고할때는 CompactMap을 쓴다면 async가 가능하다
// HTML TextURL await 가져오기
//struct ContentView: View {
// @State private var quotes = [String]()
//
// var body: some View {
// List(quotes, id: \.self, rowContent: Text.init)
// .task {
// do {
// let url = URL(string: "https://hws.dev/quotes.txt")!
//
// for try await quote in url.lines {
// quotes.append(quote)
// }
// } catch {
// // Error Message Run
// }
// }
// }
//}
// + CSV파일 다루기
//struct User: Identifiable {
// let id: Int
// let firstName:String
// let lastName:String
// let country:String
//
// init?(csv: String) {
// let fields = csv.components(separatedBy: ",")
// guard fields.count == 4 else { return nil }
//
// self.id = Int(fields[0]) ?? 0
// self.firstName = fields[1]
// self.lastName = fields[2]
// self.country = fields[3]
// }
//}
//
//struct ContentView: View {
// @State private var users = [User]()
//
// var body: some View {
// List(users) { user in
// VStack(alignment: .leading) {
// Text("\(user.firstName) \(user.lastName)")
// .font(.headline)
//
// Text(user.country)
// }
// }
// .task {
// do {
// let url = URL(string: "https://hws.dev/users.csv")!
// let userData = url.lines.compactMap(User.init)
// for try await user in userData {
// users.append(user)
// }
// } catch {
// // Error Message Run
// }
// }
// }
//}
// + 비동기과정이 어떻게 진행되는지 코드로 확인하기
//struct ContentView: View {
// @State private var lines = [String]()
// @State private var status = "Fetching..."
//
// var body: some View {
// VStack {
// Text("Count: \(lines.count)")
// Text("Status: \(status)")
// }
// .task {
// do {
// let url = URL(string: "https://hws.one/slow-fetch")!
// for try await line in url.lines {
// lines.append(line)
// }
// status = "Done"
// } catch {
// // Error Message Run
// }
// }
// }
//}