Codable
Decodable과 Encodable로 구성된 Swift 프로토콜.
Struct, Class, Enum 등의 타입 인스턴스와 JSON 타입 간의 데이터 변환을 가능하게 한다.
How to Decode JSON into Swift
데이터 파악하기
-
데이터 구조 파악
-
사용할 데이터 항목 결정
-
모델링 시 필요한 Framework들을 import
Struct, Property 선언하기
-
Codable Struct 선언
-
Static Property 선언 : 선언 시
CodingKeys
를 이용해 Coding Convention 맞추기
// JSON의 "is_deleted" 키를 "isDeleted"로 매핑
struct Meta: Codable {
isDeleted: Bool
enum CodingKeys: String, CodingKey {
case isDeleted = "is_deleted"
}
}
- Computed Property 선언 : 데이터 이용 시 편의성을 고려해 선택적으로 선언
// JSON에 포함된 imageName을 반환하는 대신,
// imageName을 인자로 제공하면 이미지 뷰를 생성해 반환하는 연산 프로퍼티
private var imageName: String
var image: Image {
Image(imageName)
}
데이터 Decode하기
파일 또는 API에서 제공하는 데이터를 Decoding하는 단계
// 배열 선언 및 함수 실행
var posts: [Post] = load("postData.json")
// 함수 내용
func load<T: Decodable>(_ filename: String) -> T {
let data: Data
...
-
Post 타입의 데이터들이 담길 배열 posts 선언
-
파일을 Decode하는 load 함수 정의 및 실행
데이터 활용하기
최종적으로 생성된 posts 배열에서 데이터를 불러와 필요한 View에서 활용
struct PostDetail: View {
// PostList에서 받아올 정보를 담을 post 변수를 초기화
// PostList에서는 PostDetail 호출 시 post 인자를 통해 정보를 전달
var post: Post
var body: some View {
HStack {
Text(post.title) // Post 모델의 title 항목을 가져와 표기
...