Moya는 네트워킹 라이브러리로, 서버와의 통신을 처리하기 위해 사용됩니다. ObjectMapper는 JSON 데이터를 모델 객체로 변환하기 위해 사용됩니다. 이 두 가지 라이브러리를 함께 사용하면 간단하게 JSON 응답을 모델로 자동 변환할 수 있습니다.
설치
Moya와 ObjectMapper는 각각 Cocoapods, Carthage 또는 Swift Package Manager를 통해 설치할 수 있습니다. 아래는 Cocoapods를 사용하는 예제입니다.
pod 'Moya'
pod 'ObjectMapper'
모델 클래스 생성
먼저, JSON 응답에 대응하는 모델 클래스를 생성해야 합니다. 예를 들어, 다음과 같은 JSON 응답이 있다고 가정해봅시다.
{
"name": "John",
"age": 30,
"email": "john@example.com"
}
해당 JSON 응답에 대응하는 모델 클래스를 작성해보겠습니다.
import ObjectMapper
class User: Mappable {
var name: String?
var age: Int?
var email: String?
required init?(map: Map) {}
func mapping(map: Map) {
name <- map["name"]
age <- map["age"]
email <- map["email"]
}
}
User 클래스는 ObjectMapper의 Mappable 프로토콜을 구현하고, 이름(name), 나이(age), 이메일(email)을 변수로 가지고 있습니다. mapping(map:)
함수에서는 각 변수를 해당하는 JSON 키와 매핑하고 있습니다.
Moya 요청 작성
이제 Moya를 사용하여 서버로부터 JSON 응답을 받아오는 요청을 작성해보겠습니다.
import Moya
let provider = MoyaProvider<API>()
provider.request(.getUser) { result in
switch result {
case .success(let response):
do {
let user = try response.mapJSON() as! [String: Any]
let userModel = Mapper<User>().map(JSON: user)
if let user = userModel {
// 모델로 변환된 유저 객체 사용
print(user.name)
print(user.age)
print(user.email)
}
} catch {
print("JSON 매핑 에러: \(error)")
}
case .failure(let error):
print("네트워크 에러: \(error)")
}
}
위의 코드에서 provider.request
는 Moya로 서버로 요청을 보내는 메소드입니다. 응답을 받아오면 response.mapJSON()
을 통해 JSON 데이터를 딕셔너리로 변환한 뒤, ObjectMapper의 map(JSON:)
메소드를 사용하여 딕셔너리를 User 객체로 매핑합니다. 그 후, 모델로 변환된 User 객체를 사용할 수 있습니다.
결론
Moya와 ObjectMapper를 함께 사용하여 JSON 응답을 모델로 자동 변환하는 방법과 코드 예제를 살펴보았습니다. 이를 통해 네트워킹 코드를 간소화하고 JSON 데이터를 모델로 쉽게 변환할 수 있습니다.
자세한 내용은 아래의 참고 자료를 확인하시기 바랍니다.