← スキル一覧に戻る

swiftui-data
by fusengine
Redefining development through cognitive automation and collaborative agent systems.
⭐ 0🍴 0📅 2026年1月24日
SKILL.md
name: swiftui-data description: Implement data persistence with SwiftData, Core Data, CloudKit sync, and local storage. Use when storing app data, creating database models, syncing with iCloud, or managing user preferences with AppStorage. user-invocable: false
SwiftUI Data Persistence
SwiftData (iOS 17+) - Recommended
import SwiftData
@Model
final class Task {
var title: String
var isCompleted: Bool
var createdAt: Date
var priority: Priority
@Relationship(deleteRule: .cascade)
var subtasks: [Subtask]?
init(title: String, priority: Priority = .medium) {
self.title = title
self.isCompleted = false
self.createdAt = .now
self.priority = priority
}
}
enum Priority: String, Codable, CaseIterable {
case low, medium, high
}
// App configuration
@main
struct MyApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(for: Task.self)
}
}
SwiftData Queries
struct TaskListView: View {
@Query(
filter: #Predicate<Task> { !$0.isCompleted },
sort: \Task.createdAt,
order: .reverse
)
private var tasks: [Task]
@Environment(\.modelContext) private var context
var body: some View {
List(tasks) { task in
TaskRow(task: task)
.swipeActions {
Button("Delete", role: .destructive) {
context.delete(task)
}
}
}
}
func addTask(_ title: String) {
let task = Task(title: title)
context.insert(task)
}
}
CloudKit Sync with SwiftData
// Enable in App configuration
@main
struct MyApp: App {
var container: ModelContainer
init() {
let schema = Schema([Task.self, Subtask.self])
let config = ModelConfiguration(
schema: schema,
cloudKitDatabase: .private("iCloud.com.myapp")
)
container = try! ModelContainer(
for: schema,
configurations: [config]
)
}
var body: some Scene {
WindowGroup {
ContentView()
}
.modelContainer(container)
}
}
AppStorage & SceneStorage
struct SettingsView: View {
// Persists to UserDefaults
@AppStorage("username") private var username = ""
@AppStorage("isDarkMode") private var isDarkMode = false
@AppStorage("fontSize") private var fontSize = 14.0
// Persists per-scene (window state)
@SceneStorage("selectedTab") private var selectedTab = 0
var body: some View {
Form {
TextField("Username", text: $username)
Toggle("Dark Mode", isOn: $isDarkMode)
Slider(value: $fontSize, in: 10...24)
}
}
}
When to Use What
| Solution | Use Case |
|---|---|
@AppStorage | Simple preferences, settings |
@SceneStorage | Window/scene-specific UI state |
| SwiftData | Complex models, relationships, CloudKit |
| Core Data | iOS < 17, advanced migrations |
| Keychain | Sensitive data (tokens, passwords) |
| FileManager | Documents, large files, exports |
スコア
総合スコア
60/100
リポジトリの品質指標に基づく評価
✓SKILL.md
SKILL.mdファイルが含まれている
+20
✓LICENSE
ライセンスが設定されている
+10
○説明文
100文字以上の説明がある
0/10
○人気
GitHub Stars 100以上
0/15
○最近の活動
3ヶ月以内に更新がある
0/10
○フォーク
10回以上フォークされている
0/5
✓Issue管理
オープンIssueが50未満
+5
✓言語
プログラミング言語が設定されている
+5
○タグ
1つ以上のタグが設定されている
0/5
レビュー
💬
レビュー機能は近日公開予定です