Codable을 이용해 JSON 데이터 모델링하기

Codable

Decodable과 Encodable로 구성된 Swift 프로토콜.

Struct, Class, Enum 등의 타입 인스턴스와 JSON 타입 간의 데이터 변환을 가능하게 한다.

How to Decode JSON into Swift

데이터 파악하기

  • 데이터 구조 파악

  • 사용할 데이터 항목 결정

  • 모델링 시 필요한 Framework들을 import

Struct, Property 선언하기

  1. Codable Struct 선언

  2. Static Property 선언 : 선언 시 CodingKeys를 이용해 Coding Convention 맞추기

// JSON의 "is_deleted" 키를 "isDeleted"로 매핑
struct Meta: Codable {
    isDeleted: Bool
    enum CodingKeys: String, CodingKey {
    case isDeleted = "is_deleted"
    }
}
  1. 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 항목을 가져와 표기
            ...

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤