Swift 개발에서 RestApi를 호출하여 정보를 받아오는 경우가 많습니다. 그런 경우, 변수명 네이밍 규칙이 본인의 규칙과 다를 경우 CodingKeys를 이용하여 RestApi 명세의 항목과 개발하는 클래스(스트럭처)의 항목을 매핑하여 개발할 수 있습니다.

이때 주의 사항입니다.

struct MovieResult : Codable {
    let trackName : String?
    let previewUrl : String?
    let artworkUrl : String?
    let releaseDate : String?
    let shortDescription : String?
    let longDescription : String?
    
    enum CodingKeys : String, CodingKey {
        case trackName
        case previewUrl
        case artworkUrl = "artworkUrl100"
        case releaseDate
        case shortDescription
        case longDescription
    }
}
  • response값에 특정항목이 없을 경우를 대비하여 String? , Int? 형태로 nil 을 대비한다
  • response항목의 이름을 다르게 사용할 경우, enum CodingKeys : String, CodingKey{ ... } 를 정의한다.
  • enum CodingKeys에 모든 항목을 정의해야 한다. 누락시 오류 발생. 이름을 다르게 사용하고 싶은 항목만 정의(예시:artworkUrl)

만약, enum CodingKeys에 항목을 누락하거나 오타를 치게 되면, 아래와 같이 오류가 발생한다. 

Type *** does not conform to protocol 'Decodable'
Type *** does not conform to protocol 'Encodable'

type does not conform to protocol Decodable, Encodable

 

Posted by 목표를 가지고 달린다
,