struct User: Decodable {
let id: Int
let name: String
// and so on...
public enum CodingKeys: String, CodingKey {
case id = "key"
case name
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(Int.self, forKey: .id)
name = try container.decode(String.self, forKey: .name)
//id라는 프로퍼티의 디코딩 키를 key로, name의 프로퍼티의 디코딩 키를 프로퍼티 이름과 동일하게 지정한다
}
}
struct User: Encodable {
let id: Int
let name: String
//and so on...
public enum CodingKeys: String, CodingKey {
case id = "key'
case name
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: .id)
try container.encode(name, forKey: .name)
//id라는 프로퍼티의 인코딩 키를 key로, name 프로퍼티의 인코딩 키를 프로퍼티 이름과 동일하게 지정함
}
}
public typealias Codable = Decodable & Encodable
JSON -> Swift 데이터 모델 & Swift 데이터 모델 -> JSON
struct User: Codable {
let id: Int
let name: String
}
public enum CodingKeys: String, CodingKey {
case id = "key"
case name
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(id, forKey: .id)
try container.encode(name, forKey: .name)
}
init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
id = try container.decode(Int.self, forKey: .id)
name = try.container.decode(String.self, forKey: .name)
}
}
Data Model 작성 -> URLSession으로 받은 Data 타입을 JSONDecoder 클래스를 사용하여 데이터를 모델 객체로 디코딩한다
do {
let user = try JSONDecoder().decode(User.self, from: data)
print("디코딩한 사용자: \(user)")
} catch {
print("디코딩 에러: \(error)")
}