iOS) 서버통신 시 데이터모델에서 데이터부분 옵셔널 처리
서버 통신 시 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 {
//...
}