https://developer.apple.com/xcode/swiftdata/
SwiftData
선언적 코드로 데이터를 쉽게 관리해주는 도구. Swift 코드를 통해 안정적으로 쿼리 요청을 보내고 필터링할 수 있다. SwiftUI와의 연동성도 좋다.
모델생성 용이
모델도 @Model
어트리뷰트만 붙여주면 추가적인 파일이나 도구없이 관리가 가능하다. 또한 제약조건도 @Attribute(.unique)
와 같은 방식으로 간단하게 선언할 수 있다.당연히 Relationship 설정도 가능하다.
@Model
class Recipe {
@Attribute(.unique) var name: String
var summary: String?
var ingredients: [Ingredient]
}
SwiftData는 내가 생성한 모델을 기반으로 커스텀 스킴을 만들 수 있고, 필드를 효율적으로 저장소에 매핑한다. 객체는 SwiftData에 의해 관리되며, 데이터베이스에서 필요할경우 fetch되고 추가 동작없이 같은 순간에 바로 save된다. 또한 Model Context API를 통해 모든 제어가 가능하다.
SwiftUI와의 연계
@Query
를 SwiftUI에서 사용해서 데이터를 가져올 수 있다. SwiftData와 SwiftUI는 함께 동작하여 데이터를 실시간으로 업데이트하고 영구데이터에 변경이 발생하면 이를 바로 반영한다. 수동적인 refresh는 필요없다.
@Query var recipes: [Recipe]
var body: some View {
List(recipes) { recipe in
NavigationLink(recipe.name, destination: RecipeView(recipe))
}
}
Swift-native Predicate
컴파일러에 의해 타입이 검사되는 표현식을 통해 데이터를 쿼리하고 필터링해서 개발중에 오타나 실수를 파악할 수 있다. Predicate 는 영구저장소에서 데이터를 매핑할 수 없는 표현식이 있는 경우 이를 컴파일 타임에 체크한다.
let simpleFood = #Predicate<Recipe> { recipe in
recipe.ingredients.count < 3
}
CloudKit을 활용한 동기화
데이터를 DocumentGroup
을 사용해 파일에 저장할 수 있고 iCloud Drive와 동기화할 수 있다. 또한 CloudKit을 사용해 다바이스와 데이터를 동기화할 수도 있다.
CoreData와의 연계
Core Data와 연동도 가능하다. 따라서 하나의 앱에서 하나의 영구저장소를 사용하는 것처럼 쓸 수 있다. Xcode가 Core Data의 모델을 SwiftData에서 사용가능한 class로 변경해준다.
'🍎 Apple > SwiftData & CoreData' 카테고리의 다른 글
[SwiftData] Migration과 버전관리 (0) | 2023.08.03 |
---|---|
[SwiftData] Meet SwiftData (0) | 2023.07.29 |
[Core Data] Core Data Stack (1) | 2022.06.09 |
[CoreData] 기초개념 (3): Entity Relationship (0) | 2022.01.03 |
[CoreData] 기초개념 (2): Query & Sorting (0) | 2022.01.03 |