Get your own website
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)
    }
  }
}