API JSON Parsing

신동준·2022년 5월 12일
0

기존의 UIKit 에서 API 데이터를 가져와서 파싱하는것은 URLSession.shared.dataTask(with: url) { (data, response, err) in URLSeesion을 completion handler 처리하였는데 SwiftUI에서는 이작업을하면 비동기가 적용이 안돼서 View나타나기전에 값이 나오지않는 문제가 있었다 그래서 Swift UI의 비동기 await async 적용해보았다


struct Response: Codable {
    var results: [Result]
}

struct Result: Codable {
    var trackId: Int
    var trackName: String
    var collectionName: String
    
}


struct ParsingJsonView: View {
    
    @State private var results = [Result]()
    
    func loadData() async {
        guard let url = URL(string:
                                "https://itunes.apple.com/search?term=taylor+swift&entity=song") else {
            print("Invalid URL")
            return
        }
        do {
            let (data, _) = try await URLSession.shared.data(from:url)
            if let decodeResponse = try? JSONDecoder().decode(Response.self, from: data) {
                results = decodeResponse.results
            }
        } catch {
            print("Invalid Data")
        }
    }
    var body: some View {
        List(results, id: \.trackId) {
            item in
            VStack(alignment: .leading) {
                Text(item.trackName)
                    .font(.headline)
                Text(item.collectionName)
            }
        }.task {
            await loadData()
        }
    }
}

View가
로드될떄 데이터가 잘로드가 되는거같아서 비동기가 성공적으로 잘돼었다

profile
Swift 예비개발자

0개의 댓글