iOS) 서버통신 시 데이터모델에서 데이터부분 옵셔널 처리

less than 1 minute read

서버 통신 시 success 일 경우 data 가 넘어오지만 fail 일 경우 넘어오지 않기도 하기 때문에 data 부분을 옵셔널로 선언해주어야 한다.

  • codingkey 를 사용해서 다음과 같이 서버에서 넘겨주는 변수명을 맞출 수 있다.

  • init() 을 통해서 아무런 값이 들어오지 않을 때 초기화도 가능하다.

struct HomeDataModel: Codable {
    let status: Int
    let success: Bool
    let message: String
    let data: HomeResponse?

    enum CodingKeys: String, CodingKey {
        case status = "status"
        case success = "success"
        case message = "message"
        case data = "data"
    }

    init(from decoder: Decoder) throws {
        let values = try decoder.container(keyedBy: CodingKeys.self)

        status = (try? values.decode(Int.self, forKey: .status)) ?? 0
        success = (try? values.decode(Bool.self, forKey: .success)) ?? false
        message = (try? values.decode(String.self, forKey: .message)) ?? ""
        data = (try? values.decode(HomeResponse.self, forKey: .data)) ?? nil
    }
}

struct HomeResponse: Codable {

//...

}

Categories:

Updated: