Notice
Recent Posts
Recent Comments
Link
관리 메뉴

김종권의 iOS 앱 개발 알아가기

[iOS - swift] Codable과 enum을 사용하여 특정 json 문자열 파싱 본문

iOS 응용 (swift)

[iOS - swift] Codable과 enum을 사용하여 특정 json 문자열 파싱

jake-kim 2021. 1. 7. 21:34

아래와 같은 json을 파싱할 때, carTypeCode를 파싱하여 swift에서 구별할 수 있는 방법?

{
   "responseCode":0,
   "message":"COMMON_OK",
   "result":[
      {
         "carTypeCode":"CTCD00001",
         "carName":"model x",
         "carCompany":"tesla"
      },
      {
         "carTypeCode":"CTCD00002",
         "carName":"morning",
         "carCompany":"kia"
      }
   ]
}

일반적인 carTypeCode

// MARK: - CarResponse
struct CarResponse: Codable {
    let responseCode: Int
    let message: String
    let result: [carResult]
}

// MARK: - carResult
struct carResult: Codable {
    let carTypeCode, carName, carCompany: String
}

enum을 이용하여 파싱되게끔 구현

  • 코드값에 대한 enum을 먼저 정의 후 이 타입을 codable에 적용
enum CarSizeTypeCode: String, Codable {
    case small   = "CTCD00001" // 소형
    case SUV     = "CTCD00002" // SUV
    
    func description() -> String {
        switch self {
            case smaill:
                return "소형"
            case SUV:
                return "SUV"
        }
    }
}

// MARK: - CarResponse
struct CarResponse: Codable {
    let responseCode: Int
    let message: String
    let result: [carResult]
}

// MARK: - carResult
struct carResult: Codable {
    let carSizeTypeCode: CarSizeTypeCode
    let carName, carCompany: String
    
	enum CodingKeys: String, CodingKey {
    	case carSizeTypeCode = "carTypeCode"
        case carName, carCompany
    }
}

  • 사용하는 쪽: enum을 사용했기 때문에 사용할 때 따로 문자열 비교를 안해도 되고 enum값으로 접근 가능
switch response.result.carSizeTypeCode {
    case .small:
        print("스몰")
    case .SUB:
        print("SUV")
}
Comments