Important
This package is under development and is being currently rewritten to fully leverage Swift 5.9.
A modern, type-safe database abstraction layer. SwiftDB aims to be an opinionated DBAL for relational and document-oriented databases.
Define anEntity
:
struct Foo : Entity , Identifiable { @Attribute var bar : String = " Untitled " var id : some Hashable { bar} } Define aSchema
:
struct MySchema : Schema { var entities : Entities { Foo . self} } Create aContentView
for your application:
struct ContentView : View { @StateObject var container = PersistentContainer ( MySchema ( ) ) var body : some View { Text ( " Hello World " ) } } Create a list view:
struct ListView : View { @EnvironmentObject var container : PersistentContainer @QueryModels < Foo > ( ) var models var body : some View { NavigationView { List ( models) { fooin NavigationLink ( destination: EditView ( foo: foo) ) { Text ( foo. bar) } . contextMenu { Button { container. delete ( foo) } label: { Text ( " Delete " ) } } } . navigationBarItems ( trailing: Button { container. create ( Foo . self) } label: { Image ( systemName: . plusCircleFill) . imageScale ( . large) } ) . navigationBarTitle ( " A List of Foo " ) } } struct EditView : View { @EnvironmentObject var container : PersistentContainer let foo : Foo var body : some View { VStack { Form { TextField ( " Enter a value " , text: foo. $bar) { container. save ( ) } } } . navigationBarTitle ( " Edit Foo " ) } } } Add it to ourContentView
:
struct ContentView : View { @StateObject var container = PersistentContainer ( MySchema ( ) ) var body : some View { ListView ( ) . databaseContainer ( container) } } That's it.