A library for a seamless storage experience with SwiftUI

easyStorage

A simple, easy to use wrapper for ObservableObject to allow for persistent data storage.

Usage

You just use the class StorageViewModel instead of ObservableObject. In StorageViewModel there are two notable methods: load(file:, data:) and save().

The file: you give the load-method is just an identifier for the property you want to store.

In load you load the data from the file you specify and save it to a key path as well as register this given key path to the save-method.

I would recommend you invoke the load-method in your view models initializer and the save-method in an onDisappear-closure in ContentView.

Example

ViewModel

class ViewModel: StorageViewModel{

@Published var names: [String] = []

	override init() {
	super.init()
	
	load(file: "names", data: \ViewModel.names)
	}
}

App

@main
struct MyApp: App {
    @StateObject var model: ViewModel = ViewModel()
    var body: some Scene {
        WindowGroup {
            ContentView()
                .environmentObject(model)
        }
    }
}

ContentView

struct  ContentView: View {

@EnvironmentObject  var  model: ViewModel
@State  var  nameString: String = ""

var body: some View {

	VStack {
		TextField("name", text: $nameString)
		
		Button("add Name"){
			model.names.append(nameString)
		}
		List(model.names, id: \.self){name in
			Text(name)
		}
	}
	.padding()
	.onDisappear(){	
		model.save()
		}
	}
}

Credits

This package is a forked version of apples Persisting Data tutorial for SwiftUI: https://developer.apple.com/tutorials/app-dev-training/persisting-data

Contribute

If there is any problem/feature missing please just open an issue or a pull request.

License

easyStorage is available under the MIT License.

Written with StackEdit.

GitHub

View Github