API URL 다루기 WWDC iOS15

신동준·2022년 5월 16일
0

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
//                }
//            }
//    }
//}

profile
Swift 예비개발자

0개의 댓글