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 onecase
has a value
Use
Wrapping & unwrapping a Box
:
// Wrap:
let box = Box(1)
// Unwrap:
let value = box.value
Changing the value of a MutableBox
:
// Mutation:
let mutableBox = MutableBox(1)
mutableBox.value = 2
Building a recursive value type:
struct BinaryTree {
let value: Int
let left: Box<BinaryTree>?
let right: Box<BinaryTree>?
}
Building a parameterized enum
:
enum Result<T> {
case Success(Box<T>)
case Failure(NSError)
}
See the sources for more details.
Integration
-
Add this repo as a submodule in e.g.
External/Box
:git submodule add https://github.com/robrix/Box.git External/Box
-
Drag
Box.xcodeproj
into your.xcworkspace
/.xcodeproj
. -
Add
Box.framework
to your target’sLink Binary With Libraries
build phase. -
You may also want to add a
Copy Files
phase which copiesBox.framework
(and any other framework dependencies you need) into your bundle’sFrameworks
directory. If your target is a framework, you may instead want the client app to includeBox.framework
.