SwiftData

SwiftData를 사용하면 선언적 코드를 사용하여 데이터를 쉽게 유지할 수 있습니다. 일반 Swift 코드를 사용하여 데이터를 쿼리 및 필터링할 수 있으며, SwiftUI와 매끄럽게 통합할 수 있습니다.

새로운 사항

SwiftData는 순수 Swift 코드를 사용하여 앱의 데이터를 모델링 및 유지할 수 있는 경량화된 표현적 API를 제공합니다. 새로운 API를 사용하면 맞춤화된 데이터 저장소를 구축하고 거래 내역, 모델 인덱스 및 복합 고유성 제약 조건 등을 활용할 수 있습니다.

최신 비디오 시청하기

Swift로 모델 생성하기

@Model이 포함된 일반 Swift 타입을 사용하여 추가 파일이나 도구를 관리할 필요 없이 데이터를 모델링해 보세요. SwiftData는 다양한 관계를 자동으로 추론할 수 있으며, 개발자는 #Unique 등의 명확한 선언을 사용하여 제약 조건을 설명할 수 있습니다. SwiftUI와 마찬가지로 외부 파일 정보나 도구가 필요하지 않습니다.

@Model
class Recipe {
	@Attribute(.unique) var name: String
	var summary: String?
	var ingredients: [Ingredient]
}

자동 영속성

SwiftData는 개발자의 모델을 사용하여 맞춤형 스키마를 만들고 모델의 필드를 기본 저장소에 효율적으로 매핑합니다. SwiftData로 관리되는 객체는 추가 작업을 하지 않아도 필요할 때 데이터베이스에서 가져와 적절한 시점에 자동으로 저장됩니다. ModelContext API를 사용하여 모두 직접 제어할 수도 있습니다.

맞춤형 데이터 저장소

기본적으로 SwiftData는 영속성을 위해 Core Data를 사용하지만, 새로운 DataStore 프로토콜을 사용하여 고유한 영속성 레이어를 구현할 수도 있습니다. DataStore를 사용하면 SwiftUI 및 SwiftData 모델링 코드를 변경하지 않고도 SwiftData API를 JSON 파일부터 웹 서비스 및 데이터베이스 엔진에 이르기까지 다양한 유형의 영속성과 함께 사용할 수 있습니다.

SwiftUI와의 통합

SwiftUI 뷰에서 @Query를 사용하면 데이터를 가져올 수 있습니다. SwiftData와 SwiftUI가 연동되어 기본 데이터 변경 시 뷰에 라이브 업데이트를 제공하므로 결과를 수동으로 새로고침할 필요가 없습니다.

@Query var recipes: [Recipe]
var body: some View {
	List(recipes) { recipe in
		NavigationLink(recipe.name, destination: RecipeView(recipe))
	}
}

Swift 네이티브 술어

컴파일러가 확인할 수 있는 네이티브 Swift 타입으로 데이터를 쿼리 및 필터링하여 개발 중 문제를 조기에 파악할 수 있습니다. 술어(Predicate)는 표현식을 기본 저장소 엔진에 매핑할 수 없는 경우 컴파일 타임 오류를 제공합니다.

let simpleFood = #Predicate<Recipe> { recipe in
	recipe.ingredients.count < 3
}

CloudKit 동기화

DocumentGroup을 사용하여 데이터를 파일에 저장하고 iCloud Drive를 통해 동기화하거나, CloudKit을 사용하여 기기 간에 데이터를 동기화할 수 있습니다.

Core Data 호환성

SwiftData는 Core Data의 검증된 저장소 아키텍처를 사용하므로, 기본 저장소가 같은 동일한 앱에서 두 가지를 모두 사용할 수 있습니다. 사용할 준비가 되면 Xcode가 Core Data 모델을 SwiftData에서 사용하기 위한 클래스로 변환합니다.