MVVM은 Model-View-ViewModel의 약어로, 소프트웨어 아키텍처 패턴 중 하나이고, 사용자 인터페이스와 비즈니스 로직을 분리하여 개발할 수 있도록 도와줍니다.
Model: 애플리케이션의 데이터와 비즈니스 로직을 담당합니다.
View: 사용자에게 보여지는 UI(User Interface)를 나타냅니다.
ViewModel: View와 Model 사이에서 데이터 바인딩을 관리하고, View의 상태를 제어합니다.
Models 폴더를 생성
swift 파일을 만들어서 받아올 데이터에 대한 구조체를 생성합니다.
아래의 참고자료 rick and morty api docs
에 있는 데이터정보를 등록해보겠습니다.
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"
},
구조체로 만들어서 타입 지정
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
}
object 형식은 다른 구조체를 하나 더 만들어서 관리
// RMOrigin.swift
struct RMOrigin: Codable {
let name :String
let url : String
}
// RMLocation.swift
struct RMSingleLocation: Codable {
let name: String
let url: String
}
api docs에 보면 status 와 gender 는 몇가지의 응답값이 정해져 있음, 이런 관련 있고 정해져 있는 값은 열거형(enum) 타입으로 관리
연관된 값이 몇가지로 정해져 있다면 열거형으로 정의 해서 관리
// 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