Skip to content

Commit

Permalink
Create usage-storedstate.md
Browse files Browse the repository at this point in the history
  • Loading branch information
0xLeif authored Sep 27, 2024
1 parent ac1b548 commit 34ebb1f
Showing 1 changed file with 72 additions and 0 deletions.
72 changes: 72 additions & 0 deletions documentation/usage-storedstate.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
# StoredState Usage

`StoredState` is a component of the **AppState** library that allows you to store and persist small amounts of data using `UserDefaults`. It is ideal for storing lightweight, non-sensitive data that should persist across app launches.

## Overview

- **StoredState** is built on top of `UserDefaults`, which means it’s fast and efficient for storing small amounts of data (such as user preferences or app settings).
- Data saved in **StoredState** persists across app sessions, allowing you to restore application state on launch.

### Key Features

- **Persistent Storage**: Data saved in `StoredState` remains available between app launches.
- **Small Data Handling**: Best used for lightweight data like preferences, toggles, or small configurations.
- **Thread-Safe**: `StoredState` ensures that data access remains safe in concurrent environments.

## Example Usage

### Defining a StoredState

You can define a **StoredState** by extending the `Application` object and declaring the state property:

```swift
import AppState

extension Application {
var userPreferences: StoredState<String> {
storedState(initial: "Default Preferences", id: "userPreferences")
}
}
```

### Accessing and Modifying StoredState in a View

You can access and modify **StoredState** values within SwiftUI views using the `@StoredState` property wrapper:

```swift
import AppState
import SwiftUI

struct PreferencesView: View {
@StoredState(\.userPreferences) var userPreferences: String

var body: some View {
VStack {
Text("Preferences: \(userPreferences)")
Button("Update Preferences") {
userPreferences = "Updated Preferences"
}
}
}
}
```

## Handling Data Migration

As your app evolves, you may update the models that are persisted via **StoredState**. When updating your data model, ensure backward compatibility. For example, you might add new fields or version your model to handle migration.

For more information, refer to the [Migration Considerations Guide](migration_considerations.md).

### Migration Considerations

- **Adding New Non-Optional Fields**: Ensure new fields are either optional or have default values to maintain backward compatibility.
- **Versioning Models**: If your data model changes over time, include a `version` field to manage different versions of your persisted data.

## Best Practices

- **Use for Small Data**: Store lightweight, non-sensitive data that needs to persist across app launches, like user preferences.
- **Consider Alternatives for Larger Data**: If you need to store large amounts of data, consider using **FileState** instead.

## Conclusion

**StoredState** is a simple and efficient way to persist small pieces of data using `UserDefaults`. It is ideal for saving preferences and other small settings across app launches while providing safe access and easy integration with SwiftUI. For more complex persistence needs, explore other **AppState** features like [FileState](usage-filestate.md) or [SyncState](usage-syncstate.md).

0 comments on commit 34ebb1f

Please sign in to comment.