안녕하세요 공공돌🧸 입니다.
오늘은 SwiftData에 새로운 데이터 모델을 정의하는 방법에 대해 공부해봤습니다.
1. Defining a new data model ( 새로운 데이터 모델 정의하기 )
데이터를 조직화하고 구조화하기 위한 과정에서 명확하고 명시적으로 정의된 데이터 모델을 만드는 것은 중요한 단계입니다.
@Model 매크로를 사용하여 SwiftData 모델 정의하기 - 단계별 안내.
@Model 매크로를 SwiftData 모델 클래스에 사용할 것입니다. 이 매크로를 사용하면 SwiftData로부터의 자동로드 및 저장이 가능하며, 변경 사항을 관찰하는 기능을 지원하며, Hashable, Identifiable, Observable 및 PersistentModel에 대한 준수를 추가합니다.
간단한 예제를 고려해 보면, 코드는 다음과 같이 보일 것입니다
@Model
class Todo {
var title: String
var description: String
init(title: String, description: String) {
self.title = title
self.description = description
}
}
해당 유형의 데이터 구조의 완전한 정의는 여기에서 가져옵니다.
@Model 매크로는 클래스에만 호환됩니다. 구조체(struct)에는 사용할 수 없습니다.
단순히 클래스를 @Model로 표시하면 해당 클래스의 저장된 속성이 SwiftData를 읽고 쓰는 getter와 setter로 자동 변환됩니다.
- SwiftData 모델 객체의 속성을 사용하는 SwiftUI 뷰를 작업할 때, 해당 속성이 변경될 때마다 뷰가 자동으로 업데이트됩니다. 이는 이제 더 이상 @Published와 같은 주석을 사용할 필요가 없다는 것을 의미합니다. SwiftData를 사용하면 프로세스를 단순화하고 추가 주석이 필요 없게 됩니다.
- SwiftData는 최대 성능을 위해 여러 변경 사항을 그룹화합니다.
- 이러한 배치 중 하나가 완료될 때마다 SwiftData는 모든 미결된 변경 사항을 자동으로 저장하므로 데이터가 항상 안전하게 보관됩니다. 예를 들어, 데이터 삽입, 삭제, 및 업데이트와 같은 작업을 수행할 때입니다.
- 이 매크로에 영향을 받지 않는 계산된 속성은 SwiftData 지속적 저장소에 저장되지 않습니다.
모델을 확장하는 다양한 방법이 있습니다. 예를 들어, 각 Todo에는 카테고리가 있다고 가정할 수 있습니다.
@Model
class Todo {
var title: String
var description: String
var category: Category?
init(title: String, description: String, category: Category?) {
self.title = title
self.description = description
self.category = category
}
}
그것은 일대일 관계에 돌입합니다.
모델을 확장하는 또 다른 방법은 각 속성에 특별한 속성을 추가하는 것입니다.
예를 들어, 모든 Todo에는 타임스탬프가 있는 고유한 날짜가 있어야 한다고 말할 수 있습니다.
@Model
class Todo {
var title: String
var description: String
var category: Category?
@Attribute(.unique) var date: Date
init(title: String, description: String, category: Category?, date: .now,) {
self.title = title
self.description = description
self.category = category
self.date = date
}
}
SwiftData는 이 규칙을 자동으로 적용하여 두 개의 Todo가 동일한 날짜와 시간을 갖지 않도록 보장합니다.
공부하는 공돌이, 공공돌입니다🐻
@sheep1sik
'iOS > SwiftData' 카테고리의 다른 글
[ SwiftData ] SwiftData란? (20) | 2024.01.29 |
---|