[swift] Moya와 ObjectMapper를 사용하여 JSON 데이터를 모델로 변환하는 코드 예제

이번 글에서는 Swift에서 Moya와 ObjectMapper를 사용하여 JSON 데이터를 모델로 변환하는 방법에 대해 알아보겠습니다.

1. Moya와 ObjectMapper 추가

먼저, 이 작업을 수행하기 위해 Moya와 ObjectMapper를 프로젝트에 추가해야 합니다.

// Podfile

platform :ios, '10.0'

target 'YourTargetName' do
  use_frameworks!

  pod 'Moya', '~> 15.0'
  pod 'ObjectMapper', '~> 4.0'

  # 다른 팟들 추가 가능

end

터미널에서 pod install 명령어를 실행하여 의존성을 설치합니다.

2. 모델 클래스 생성

다음으로, JSON 데이터를 변환할 모델 클래스를 생성해야 합니다.

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"]
    }
}

위의 예제에서는 User라는 모델 클래스를 생성하였습니다. Mappable 프로토콜을 채택하고, id, name, email 프로퍼티를 정의하였습니다. mapping(map:) 메서드를 통해 JSON 데이터의 키와 모델 클래스의 프로퍼티를 매핑합니다.

3. MoyaProvider를 사용하여 API 요청하기

이제 MoyaProvider를 사용하여 API 요청을 보낼 수 있습니다. 다음은 예제입니다.

import Moya

let provider = MoyaProvider<API>()

enum API {
    case getUser(id: Int)
}

extension API: TargetType {
    var baseURL: URL {
        return URL(string: "https://api.example.com")!
    }
    
    var path: String {
        switch self {
        case .getUser(let id):
            return "/users/\(id)"
        }
    }
    
    var method: Moya.Method {
        return .get
    }
    
    var sampleData: Data {
        // API 응답 예제 데이터
        return Data()
    }
    
    var task: Task {
        return .requestPlain
    }
    
    var headers: [String: String]? {
        return nil
    }
}

// API 요청
provider.request(.getUser(id: 1)) { result in
    switch result {
    case let .success(response):
        do {
            let user = try response.mapObject(User.self)
            // 모델로 변환한 데이터 사용
        } catch {
            // 변환 실패 처리
        }
    case let .failure(error):
        // 요청 실패 처리
    }
}

위의 예제에서는 MoyaProviderrequest(_:completion:) 메서드를 사용하여 /users/1에 대한 GET 요청을 보냅니다. 응답을 받으면 response.mapObject(_:completion:) 메서드를 사용하여 JSON 데이터를 User 모델로 변환합니다.

이렇게 JSON 데이터를 모델로 변환할 수 있습니다. Moya와 ObjectMapper는 강력한 도구들이므로 프로젝트에 적용해 보시기 바랍니다.

참고 자료