SwiftData-Agent-Skill은(는) 무엇을 하나요?
AI 코딩 어시스턴트가 정확한 SwiftData 코드를 생성하고, 모델, 쿼리, 조건자, 마이그레이션 및 iCloud 동기화를 효과적으로 처리할 수 있도록 향상시킵니다.
개요
SwiftData는 Swift의 새로운 기능을 활용하여 데이터 지속성을 단순화하는 Apple의 최신 프레임워크입니다. 이 스킬은 AI 어시스턴트가 SwiftData 관련 작업에서 일관되고 정확한 코드를 생성하도록 안내합니다.
주요 기능
- 모델 정의:
@Model매크로를 사용한 데이터 모델 생성 방법 - 쿼리 작성:
@Query속성 래퍼와FetchDescriptor를 이용한 데이터 검색 - 조건자 사용: Swift 조건자(Predicate)를 사용한 필터링
- 마이그레이션: 스키마 변경 시 데이터 마이그레이션 전략
- iCloud 동기화: iCloud를 통한 다중 기기 데이터 동기화 설정
지원 플랫폼
- iOS 17+
- macOS 14+
- tvOS 17+
- watchOS 10+
- visionOS 1.0+
사용법
모델 정의
import SwiftData
import Foundation
@Model
final class Task {
var title: String
var isCompleted: Bool
var dueDate: Date
var notes: String?
var priority: Priority = .medium
init(title: String, isCompleted: Bool = false, dueDate: Date = Date(), notes: String? = nil, priority: Priority = .medium) {
self.title = title
self.isCompleted = isCompleted
self.dueDate = dueDate
self.notes = notes
self.priority = priority
}
}
enum Priority: String, Codable {
case low
case medium
case high
}
쿼리 예시
import SwiftUI
import SwiftData
struct TaskListView: View {
@Query(filter: #Predicate<Task> { $0.isCompleted == false },
sort: \.dueDate) private var tasks: [Task]
var body: some View {
List(tasks) { task in
HStack {
Text(task.title)
Spacer()
Text(task.dueDate, style: .date)
}
}
}
}
FetchDescriptor 사용
func fetchHighPriorityTasks() -> [Task] {
let descriptor = FetchDescriptor<Task>(
predicate: #Predicate { $0.priority == .high },
sortBy: [SortDescriptor(\.dueDate, order: .forward)]
)
return try? modelContext.fetch(descriptor) ?? []
}
마이그레이션
스키마 변경 시 다음 단계를 따르세요:
- 새 모델 버전 정의
- 마이그레이션 계획 생성
- 컨테이너 설정에서 마이그레이션 활성화
let container = try ModelContainer(for: Task.self, migrationPlan: TaskMigrationPlan.self)
iCloud 동기화
let config = ModelConfiguration(cloudKitContainerIdentifier: "iCloud.com.your.app")
let container = try ModelContainer(for: Task.self, configurations: config)
기여
개선 사항이나 수정 사항이 있으면 Pull Request를 열어 주세요.