/Directory

A means of accessing the file system conveniently in a SwiftUI environment.

Primary LanguageSwiftMIT LicenseMIT

Directory

iOS macOS

A means of accessing the file system in a SwiftUI environment, conveniently.

Usage

Let's assume you have a data type called 'Project'.

struct Project: Codable, Equatable, Container {

    let name: String
    
    // See wiki/typical-implementation
}

By conforming to the above protocols, you may now create Directory<Project> or PhotosDirectory<Project>.

struct ContentView: View {
    
    @StateObject var store: Directory<Project>
    
    var body: some View {
        List {
            ForEach(store.fetchedItems) { project in
                // do something
            }
        }
        .onAppear(perform: {
            // store.fetchAndWait()
            Task {
               await store.fetch()
            }
        })
    }
        
    // stores permanently to disk
    // triggers UI re-render
    private func addProject() {
        let project = Project(name: "Project " + UUID().uuidString)
        try! store.append(project)
        // See wiki/useful-api for additional functionality.
    }
}
  • For parent-child folder relationships see wiki.
  • Demo App available here.
  • Only suitable for small payloads. If using larger files and / or CloudKit consider using NSFilCoordinator directly.

Installation

Use the Swift Package Manager documentation.