
애플은 2023년 SwiftData를 iOS 개발의 일환으로 소개했습니다. 이를 통해 선언적 코딩을 통해 데이터 지속성을 제공하며, UIKit이 데이터 저장을 위해 Core Data를 사용하는 것과 유사하게, SwiftData는 애플리케이션의 관리 및 저장 프로세스를 간소화합니다.
- SwiftData는 자체적으로 CoreData 기초 위에 구축된 프레임워크입니다.
- 모델, 관계 및 마이그레이션을 정의하기 위한 선언적 방법을 제공합니다.
- Swift Concurrency 기능을 제공하여 데이터 작업을 비동기적으로 수행할 수 있습니다.
- 여러 기기로 클라우드와 데이터를 동기화하는 클라우드 동기화 기능을 제공합니다.
SwiftData의 주요 부분은 다음과 같습니다:
- 모델
- 컨테이너
- 컨텍스트
1. 모델
모델은 저장소에 저장해야 하는 데이터입니다.
@모델
최종 클래스 할 일 항목 {
@속성(.고유) 렛 title: 문자열
렛 timeStaamp: 문자열
렛 isCompleted: 부울
렛 isCritical: 부울
이닛(title: 문자열, timeStaamp: 문자열, isCompleted: 부울, isCritical: 부울) {
이.self.title = title
이.self.timeStaamp = timeStaamp
이.self.isCompleted = isCompleted
이.self.isCritical = isCritical
}
}
여기서 @Model은 ToDoItem Model이 SwiftData model임을 나타내는 Macro입니다. 또한, DB에서 고유하게 만들기 위해 title에 unique 속성을 추가해주세요.
2. 컨테이너
장치에 데이터를 저장할 때 컨테이너라고 불리는 저장 공간이 필요합니다.
모델 컨테이너는 앱의 WindowGroup이 호출될 때 초기화됩니다.
struct SwiftData_ExampleApp: App {
var body: some Scene {
WindowGroup {
ContentView()
.modelContainer(for: ToDoItem.self)
}
}
}
3. Context
그 역할은 생성, 삭제 및 수정된 모든 객체를 추적하여 모든 모델이 나중에 컨테이너에 저장될 수 있도록 합니다.
struct ContentView: View {
@Environment(\.modelContext) var context
var body: some View {
VStack {
Image(systemName: "globe")
.imageScale(.large)
.foregroundStyle(.tint)
Text("Hello, world!")
}
.padding()
}
}
@Environment property wrapper는 SwiftUI의 미리 정의된 키들과 함께 작동합니다.
다음 SwiftData의 부분이 곧 발표될 예정이에요!
조급해하지 마세요.