[swift] Moya를 통해 받은 JSON 데이터를 ObjectMapper를 사용해 객체로 매핑하기

Moya는 Swift에서 네트워크 작업을 보다 간편하게 처리할 수 있는 라이브러리입니다. ObjectMapper는 Swift에서 JSON 데이터를 매핑하기 위한 편리한 라이브러리입니다. 이 두 가지를 함께 사용하여 Moya를 통해 받은 JSON 데이터를 객체로 매핑하는 방법을 알아보겠습니다.

1. Moya와 ObjectMapper 설치하기

먼저, Moya와 ObjectMapper를 프로젝트에 설치해야 합니다. CocoaPods를 사용한다면 Podfile에 다음과 같이 작성하여 설치합니다.

pod 'Moya'
pod 'ObjectMapper'

그리고 터미널에서 다음 명령어를 실행하여 설치합니다.

pod install

2. 모델 클래스 생성하기

JSON 데이터를 매핑하기 위해 매핑할 데이터의 형태에 대한 모델 클래스를 생성해야 합니다. 예를 들어, 다음과 같은 JSON 데이터가 있다고 가정해봅시다.

{
    "id": 1,
    "name": "John Doe",
    "email": "john.doe@email.com"
}

이 데이터를 매핑하기 위해 User라는 모델 클래스를 생성합니다.

import Foundation
import ObjectMapper

class User: Mappable {
    var id: Int?
    var name: String?
    var email: String?
    
    required init?(map: Map) {}
    
    func mapping(map: Map) {
        id <- map["id"]
        name <- map["name"]
        email <- map["email"]
    }
}

3. Moya를 이용해 JSON 데이터 받기

Moya를 사용하여 서버에서 JSON 데이터를 받아옵니다. 예를 들어, 사용자 정보를 가져오는 API를 호출한다고 가정합니다.

import Moya

let provider = MoyaProvider<YourAPI>()
provider.request(.getUser(id: 1)) { result in
    switch result {
    case let .success(response):
        // JSON 데이터는 response.data에 있습니다.
        let json = try? response.mapJSON()
        print(json)
    case let .failure(error):
        print(error)
    }
}

4. ObjectMapper를 이용해 객체로 매핑하기

Moya를 통해 받은 JSON 데이터를 ObjectMapper를 사용하여 User 객체로 매핑합니다.

// Moya를 이용해 받은 JSON 데이터
let json = """
{
    "id": 1,
    "name": "John Doe",
    "email": "john.doe@email.com"
}
"""

// JSON 데이터를 Dictionary로 변환
let userDict = try? JSONSerialization.jsonObject(with: json.data(using: .utf8)!, options: []) as? [String: Any]

// ObjectMapper를 이용해 Dictionary를 User 객체로 매핑
let user = Mapper<User>().map(JSONObject: userDict)

// 매핑된 User 객체 사용
print(user?.name)
print(user?.email)

이제 Moya와 ObjectMapper를 사용하여 JSON 데이터를 객체로 매핑하는 방법을 알게 되었습니다. 이를 활용하여 네트워크 작업을 보다 효율적으로 처리하고, JSON 데이터를 쉽게 객체로 변환할 수 있습니다.