Skip to content

Swift µframework of the ubiquitous Box<T> & MutableBox<T> reference types, for recursive value types & misc. other purposes.

License

Notifications You must be signed in to change notification settings

robrix/Box

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

86 Commits

Repository files navigation

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 one case has a value

Use

Wrapping & unwrapping a Box:

// Wrap: letbox=Box(1) // Unwrap: letvalue= box.value

Changing the value of a MutableBox:

// Mutation: letmutableBox=MutableBox(1) mutableBox.value =2

Building a recursive value type:

structBinaryTree{letvalue:Intletleft:Box<BinaryTree>?letright:Box<BinaryTree>?}

Building a parameterized enum:

enumResult<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 target’s 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 bundle’s Frameworks directory. If your target is a framework, you may instead want the client app to include Box.framework.

About

Swift µframework of the ubiquitous Box<T> & MutableBox<T> reference types, for recursive value types & misc. other purposes.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 6