Dactyloidae/mobile/ios/ThirdParty/Box/README.md
2026-06-26 21:04:09 -07:00

58 lines
1.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Box
This is a Swift microframework which implements `Box<T>` & `MutableBox<T>`, with implementations of `==`/`!=` where `T`: `Equatable`.
`Box` is typically used to work around limitations of value types:
- recursive `struct`s/`enum`s
- type-parameterized `enum`s where more than one `case` has a value
## Use
Wrapping & unwrapping a `Box`:
```swift
// Wrap:
let box = Box(1)
// Unwrap:
let value = box.value
```
Changing the value of a `MutableBox`:
```swift
// Mutation:
let mutableBox = MutableBox(1)
mutableBox.value = 2
```
Building a recursive value type:
```swift
struct BinaryTree {
let value: Int
let left: Box<BinaryTree>?
let right: Box<BinaryTree>?
}
```
Building a parameterized `enum`:
```swift
enum Result<T> {
case Success(Box<T>)
case Failure(NSError)
}
```
See the sources for more details.
## Integration
1. Add this repo as a submodule in e.g. `External/Box`:
git submodule add https://github.com/robrix/Box.git External/Box
2. Drag `Box.xcodeproj` into your `.xcworkspace`/`.xcodeproj`.
3. Add `Box.framework` to your targets `Link Binary With Libraries` build phase.
4. You may also want to add a `Copy Files` phase which copies `Box.framework` (and any other framework dependencies you need) into your bundles `Frameworks` directory. If your target is a framework, you may instead want the client app to include `Box.framework`.