Demo.swift
ContentView.swift
App.swift
import SwiftUI
import CoreData
@objc(Note)
class Note: NSManagedObject {
@NSManaged var title: String?
}
extension Note {
@nonobjc class func fetchRequest() -> NSFetchRequest<Note> { NSFetchRequest<Note>(entityName: "Note") }
}
struct PersistenceController {
static let shared = PersistenceController()
let container: NSPersistentContainer
init() {
// Programmatic model so the sample runs without an .xcdatamodeld
let model = NSManagedObjectModel()
let entity = NSEntityDescription()
entity.name = "Note"
entity.managedObjectClassName = NSStringFromClass(Note.self)
let title = NSAttributeDescription()
title.name = "title"
title.attributeType = .stringAttributeType
title.isOptional = true
entity.properties = [title]
model.entities = [entity]
container = NSPersistentContainer(name: "MyModel", managedObjectModel: model)
let description = NSPersistentStoreDescription()
description.type = NSInMemoryStoreType
container.persistentStoreDescriptions = [description]
container.loadPersistentStores { _, error in
if let error = error { fatalError("Unresolved error: \(error)") }
}
}
}
struct BasicCoreDataView: View {
@Environment(\.managedObjectContext) private var context
@FetchRequest(sortDescriptors: []) private var items: FetchedResults<Note>
var body: some View {
List(items, id: \.objectID) { note in Text(note.title ?? "") }
.toolbar { Button("Add") { add() } }
}
private func add() {
let n = Note(context: context)
n.title = "New"
try? context.save()
}
}
import SwiftUI
struct ContentView: View {
var body: some View {
BasicCoreDataView()
}
}
import SwiftUI
import CoreData
@main
struct MyApp: App {
let persistence = PersistenceController.shared
var body: some Scene {
WindowGroup {
ContentView()
.environment(\.managedObjectContext, persistence.container.viewContext)
}
}
}