Box
Box copied to clipboard
Swift µframework of the ubiquitous Box<T> & MutableBox<T> reference types, for recursive value types & misc. other purposes.
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
structs/enums - type-parameterized
enums where more than onecasehas 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.xcodeprojinto your.xcworkspace/.xcodeproj. -
Add
Box.frameworkto your target’sLink Binary With Librariesbuild phase. -
You may also want to add a
Copy Filesphase which copiesBox.framework(and any other framework dependencies you need) into your bundle’sFrameworksdirectory. If your target is a framework, you may instead want the client app to includeBox.framework.