[swift] api 데이터 관리

chosh·2023년 5월 13일
0

MVVM이란?

MVVM은 Model-View-ViewModel의 약어로, 소프트웨어 아키텍처 패턴 중 하나이고, 사용자 인터페이스와 비즈니스 로직을 분리하여 개발할 수 있도록 도와줍니다.

Model: 애플리케이션의 데이터와 비즈니스 로직을 담당합니다.
View: 사용자에게 보여지는 UI(User Interface)를 나타냅니다.
ViewModel: View와 Model 사이에서 데이터 바인딩을 관리하고, View의 상태를 제어합니다.

데이터를 Model에서 관리

  1. Models 폴더를 생성

  2. swift 파일을 만들어서 받아올 데이터에 대한 구조체를 생성합니다.

    • 클래스대신 구조체를 생성하는 이유는 스위프트에서 클래스를 사용해야 되는 상황이 아니면 구조체 사용을 권장
      • 클래스의 상속과 같은 기능을 사용할 때를 제외하고 구조체를 사용(메모리적인 이점이 있음)
  3. 아래의 참고자료 rick and morty api docs 에 있는 데이터정보를 등록해보겠습니다.

  4. result 에 대한 데이터 타입을 지정 할 예정이니 받아올 result를 복사해온다

    {
          "id": 1,
          "name": "Rick Sanchez",
          "status": "Alive",
          "species": "Human",
          "type": "",
          "gender": "Male",
          "origin": {
            "name": "Earth",
            "url": "https://rickandmortyapi.com/api/location/1"
          },
          "location": {
            "name": "Earth",
            "url": "https://rickandmortyapi.com/api/location/20"
          },
          "image": "https://rickandmortyapi.com/api/character/avatar/1.jpeg",
          "episode": [
            "https://rickandmortyapi.com/api/episode/1",
            "https://rickandmortyapi.com/api/episode/2",
            // ...
          ],
          "url": "https://rickandmortyapi.com/api/character/1",
          "created": "2017-11-04T18:48:46.250Z"
    },
  5. 구조체로 만들어서 타입 지정

    struct RMCharacter: Codable {
          let id: Int
          let name: String
          let status: String
          let species: String
          let type: String
          let gender: String
          let origin: {
            "name": "Earth",
            "url": "https://rickandmortyapi.com/api/location/1"
          },
          let location: {
            "name": "Earth",
            "url": "https://rickandmortyapi.com/api/location/20"
          },
          let image: String
          let episode: [String]
          let url: String
          let created: String
    }
  6. object 형식은 다른 구조체를 하나 더 만들어서 관리

    // RMOrigin.swift
    struct RMOrigin: Codable {
        let name :String
        let url : String
    }
    
    // RMLocation.swift
    struct RMSingleLocation: Codable {
        let name: String
        let url: String
    }
  7. api docs에 보면 status 와 gender 는 몇가지의 응답값이 정해져 있음, 이런 관련 있고 정해져 있는 값은 열거형(enum) 타입으로 관리

    • api docs
      status: The status of the character ('Alive', 'Dead' or 'unknown').
      gender: The gender of the character ('Female', 'Male', 'Genderless' or 'unknown').

    연관된 값이 몇가지로 정해져 있다면 열거형으로 정의 해서 관리

    // RMCharacterStatus.swift
    enum RMCharacterStatus: String, Codable {
        case alive = "Alive"
        case dead = "Dead"
        case `unknown` = "unknown"
    }
    
    // RMCharacterGender.swift
    enum RMCharacterGender: String, Codable {
        case male = "Male"
        case female = "Female"
        case genderless = "Genderless"
        case `unknown` = "unknown"
    }

최종코드

struct RMCharacter: Codable {
    let id: Int
    let name: String
    let status: RMCharacterStatus
    let species: String
    let type: String
    let gender: RMCharacterGender
    let origin: RMOrigin
    let location: RMSingleLocation
    let image: String
    let episode: [String]
    let url: String
    let created: String
}

참고자료

Build FULL iOS App in Swift: Part 3 (Rick & Morty | 2023) – Data Models
rick and morty api docs
chatGPT

profile
제가 참고하기 위해 만든 블로그라 글을 편하게 작성했습니다. 틀린거 있다면 댓글 부탁드립니다.

0개의 댓글