[swift] Swift PromiseKit과 JSON 파싱

PromiseKit은 Swift 프로그래밍 언어를 위한 비동기 작업 처리 라이브러리입니다. 이 라이브러리는 약속(Promise)이라는 개념을 기반으로 동작하며, 비동기 작업을 간편하게 처리할 수 있도록 도와줍니다. 이번에는 PromiseKit을 사용하여 JSON 파싱을 하는 방법을 알아보겠습니다.

설치

먼저, PromiseKit을 설치해야 합니다. Swift 프로젝트의 Podfile에 다음과 같이 추가합니다:

pod 'PromiseKit'

그리고 터미널에서 pod install 명령어를 실행하여 PromiseKit을 프로젝트에 설치합니다.

JSON 파싱

PromiseKit을 사용하여 JSON 파싱을 하려면, URLSessionCodable 프로토콜을 함께 사용합니다. URLSession은 네트워킹 작업을 처리하고, Codable은 JSON 데이터를 자동으로 파싱할 수 있도록 도와줍니다.

먼저, JSON 데이터를 가져오는 네트워킹 작업을 Promise로 감싸는 함수를 작성합니다:

import PromiseKit

func fetchData() -> Promise<Data> {
    let url = URL(string: "https://api.example.com/data.json")!
    let request = URLRequest(url: url)
    
    return Promise { seal in
        URLSession.shared.dataTask(with: request) { data, response, error in
            if let error = error {
                seal.reject(error)
                return
            }
            
            guard let data = data else {
                let error = NSError(domain: "com.example", code: 0, userInfo: [NSLocalizedDescriptionKey: "No data"])
                seal.reject(error)
                return
            }
            
            seal.fulfill(data)
        }.resume()
    }
}

위의 코드에서는 URLSession.shared.dataTask 메서드를 사용하여 네트워킹 작업을 수행하고, 작업이 완료되면 Promise를 사용하여 결과를 전달합니다.

다음으로, JSON 데이터를 파싱하기 위한 Decodable 모델을 작성합니다:

struct MyData: Decodable {
    let name: String
    let age: Int
}

Decodable 프로토콜을 채택하여 JSON 데이터를 파싱하기 위한 프로퍼티들을 정의합니다.

마지막으로, fetchData 함수와 Decodable 모델을 함께 사용하여 JSON 데이터를 파싱하는 코드를 작성합니다:

fetchData().then { data in
    let decoder = JSONDecoder()
    let myData = try decoder.decode(MyData.self, from: data)
    
    print("이름: \(myData.name)")
    print("나이: \(myData.age)")
}.catch { error in
    print("에러: \(error)")
}

위의 코드에서는 fetchData 함수를 호출하여 JSON 데이터를 가져온 다음, JSONDecoder를 사용하여 데이터를 MyData 모델로 파싱합니다. 파싱이 성공하면 모델의 프로퍼티 값을 출력하고, 파싱이 실패하면 에러를 출력합니다.

결론

Swift PromiseKit을 사용하여 JSON 파싱을 처리하는 방법에 대해 알아보았습니다. PromiseKit은 비동기 작업을 간단하게 처리할 수 있도록 도와주는 강력한 라이브러리입니다. JSON 파싱을 할 때는 URLSessionCodable을 함께 사용하여 더욱 편리하게 작업할 수 있습니다.