사전과제 전형을 하며 받은 피드백 중 한가지가 ObjectMapper를 사용해보라는 것이었다.
ObjectMapper는 JSON String을 parsing할 때 사용하는 외부 라이브러리이다.
Mappable 프로토콜을 채택해야하며, 아래와 같은 방법으로 사용할 수 있다.
import ObjectMapper
struct Weather: Mappable {
var temp: Double?
var feelsLike: String?
var tempMin: String?
var tempMax: String?
init?(map: Map) { }
mutating func mapping(map: Map) {
temp <- map["temp"]
feelsLike <- map["feels_like"]
tempMin <- map["temp_min"]
tempMax <- map["temp_max"]
}
}
ObjectMapper와 다르게 mapping 메서드를 작성해 줄 필요가 없고, 대신에 CodingKey 프로토콜을 채택한 열거형을 만들어 모델의 프로퍼티와 같은 케이스를 작성해야 한다.
모델의 프로퍼티와 JSON의 프로퍼티가 같을 경우를 제외하고는 언하는 키 값을 case에 적어주고 기존 JSON의 프로퍼티를 대입해주면 된다.
import Foundation
struct Weather: Codable {
var temp: Double?
var feelsLike: String?
var tempMin: String?
var tempMax: String?
enum CodingKeys: String, CodingKey {
case temp
case feelsLike = "feels_like"
case tempMin = "temp_min"
case tempMax = "temp_max"
}
}
개인적인 생각이지만, 외부 라이브러리이기도 하고 Codable과 비교했을 때 크게 이점이 되는 부분이 없다고 생각되어 나는 앞으로도 Codable을 사용할 것 같다. ㅎㅎ..
참고