오늘은 Codable을 알아볼게요~~
JSON파일을 쉽게 Encoding/Decoding하게 해줍니다.
음.. 그럼 Encoding과 Decoding은 뭐죠???
Encoding부터 알아보죠!
원하는 struct, class, enum등의 인스턴스를 JSON 형태의 Data로 만들어 주는 것
이해가 되셨나요?
코드로 보시죠 💻
struct Person: Codable {
var name: String
var age: Int
}
let changbro: Person = .init(name: "changbro", age: 27)
Codable을 이용하여 JSON 형태의 Data로 Encoding하고 싶은 경우에는 반드시 Codable이라는 Protocol을 준수하고 있어야 합니다!!(안하면 오류나요😅)
이제 encoding 시작하겠습니다 !!
let enc = try? JSONEncoder().encode(changbro)
간단하죠?? 이 Data를 String으로 변환하여 출력해보면
JSON 데이터로 만들어져 출력되는 것을 확인할 수 있습니다!
이제 Decoding을 알아보죠
Decoding은 JSON 형태의 Data를 struct,class,enum등의 인스턴스에 자동으로 파싱해주는 것
코드를 보고 이해해보죠 !!
Encoding보다 Decoding이 더 많이 쓰입니다 ㅎㅎ
struct Person: Codable {
var name: String
var age: Int
}
아까 설명드렸던 코드와 같이 Codable을 준수하는 구조체가 있습니다.
서버에서 name,age가 담긴 JSON Data를 준다고 생각해보죠
let data = """
{
"name" : "changbro",
"age" : 27
}
""".data(using: .utf8)!
똑같이 한줄이면 됩니다!
let changbro = try? JSONDecoder().decode(Person.self, from: data)
출력해보면?!
원리는 JSON의 key값과 구조체의 변수 이름이 동일하면 변수의 값에 key의 value를 파싱하는 원리입니다.
하지만 예외 상황이 있겠죠??
위 코드들을 예시로 key값이 name이 아니라 nickname으로 왔다고 온 경우
struct Human: Codable {
var name: String
}
enum CodingKeys: String, CodingKey {
case name = "nickname"
}
}
struct Human: Codable {
var name: String?
}
이해가 되셨나요?!