1. ObjectMapper 설치
우선, ObjectMapper를 사용하기 위해 프로젝트에 ObjectMapper 라이브러리를 설치해야 합니다. Cocoapods를 이용한다면 Podfile
에 아래와 같이 추가합니다.
pod 'ObjectMapper'
2. 모델 객체 생성
모델 객체를 생성하기 위해 다음과 같이 구조체나 클래스를 정의합니다.
struct User: Mappable {
var name: String?
var age: Int?
init?(map: Map) {
}
mutating func mapping(map: Map) {
name <- map["name"]
age <- map["age"]
}
}
위 코드에서 User
구조체는 Mappable
프로토콜을 구현하고 있습니다. 이는 ObjectMapper 라이브러리가 모델 객체를 JSON으로 매핑 및 역매핑하기 위해 사용하는 프로토콜입니다.
init?(map: Map)
은 맵핑을 위한 초기화 메서드이고, mutating func mapping(map: Map)
은 맵핑을 하는 메서드입니다. mapping
메서드에서 "name"
키에 해당하는 값을 name
속성에 매핑하도록 정의하고, "age"
키에 해당하는 값을 age
속성에 매핑하도록 정의했습니다.
3. Moya와 ObjectMapper를 활용한 JSON 매핑
Moya는 네트워크 라이브러리로서 서버 API 호출을 간단하게 할 수 있도록 도와줍니다. 이번 예시에서는 Alamofire와 함께 Moya를 사용합니다.
아래는 MoyaProvider를 이용해 API 호출 후, ObjectMapper를 사용하여 응답 JSON을 모델 객체로 변환하는 예시 코드입니다.
import Moya
import ObjectMapper
let provider = MoyaProvider<MyAPI>()
provider.request(.getUser) { result in
switch result {
case let .success(response):
do {
let user = try response.mapObject(User.self)
print(user.name)
print(user.age)
} catch {
print(error)
}
case let .failure(error):
print(error)
}
}
위 코드에서 getUser
는 Moya의 TargetType
프로토콜을 준수하는 열거형으로, 서버 API 호출을 정의한 것입니다.
provider.request
는 API 호출을 실행하는 메서드로, 결과는 result
로 반환됩니다. 성공적인 경우 .success(response)
가 호출되고, 이 때 response.mapObject(User.self)
를 사용하여 응답 JSON을 User
모델 객체로 변환합니다.
변환한 User
객체에서 name
과 age
속성에 접근하여 사용할 수 있습니다.
이처럼 Moya와 ObjectMapper를 함께 사용하면 JSON 응답을 가진 서버 API 호출 후, 편리하게 응답 JSON을 모델 객체로 변환하여 사용할 수 있습니다.