https://github.com/brightdigit/options
Sometimes there are situations where you want to use an Enum in an OptionSet or you want Enum backed by a RawType of Int but also have String labels as well
https://github.com/brightdigit/options
bitflags codable enum optionset swift
Last synced: 3 months ago
JSON representation
Sometimes there are situations where you want to use an Enum in an OptionSet or you want Enum backed by a RawType of Int but also have String labels as well
- Host: GitHub
- URL: https://github.com/brightdigit/options
- Owner: brightdigit
- License: mit
- Created: 2021-03-30T22:40:41.000Z (almost 5 years ago)
- Default Branch: main
- Last Pushed: 2025-06-17T21:10:04.000Z (7 months ago)
- Last Synced: 2025-08-12T08:15:40.840Z (6 months ago)
- Topics: bitflags, codable, enum, optionset, swift
- Language: Swift
- Homepage:
- Size: 151 KB
- Stars: 21
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Options
More powerful options for `Enum` and `OptionSet` types.
[](https://swift.org)
[](http://twitter.com/brightdigit)



[](https://swiftpackageindex.com/brightdigit/Options)
[](https://swiftpackageindex.com/brightdigit/Options)
[](https://codecov.io/gh/brightdigit/Options)
[](https://www.codefactor.io/repository/github/brightdigit/Options)
[](https://codebeat.co/projects/github-com-brightdigit-mistkit-main)
[](https://codeclimate.com/github/brightdigit/Options)
[](https://codeclimate.com/github/brightdigit/Options)
[](https://codeclimate.com/github/brightdigit/Options)
[](https://houndci.com)
# Table of Contents
* [Introduction](#introduction)
* [Requirements](#requirements)
* [Installation](#installation)
* [Usage](#usage)
* [Versatile Options with Enums and OptionSets](#versatile-options-with-enums-and-optionsets)
* [Multiple Value Types](#multiple-value-types)
* [Creating an OptionSet](#creating-an-optionset)
* [Further Code Documentation](#further-code-documentation)
* [License](#license)
# Introduction
**Options** provides a powerful set of features for `Enum` and `OptionSet` types:
- Providing additional representations for `Enum` types besides the `RawType rawValue`
- Being able to interchange between `Enum` and `OptionSet` types
- Using an additional value type for a `Codable` `OptionSet`
# Requirements
**Apple Platforms**
- Xcode 14.1 or later
- Swift 5.7.1 or later
- iOS 16 / watchOS 9 / tvOS 16 / macOS 12 or later deployment targets
**Linux**
- Ubuntu 20.04 or later
- Swift 5.7.1 or later
# Installation
Use the Swift Package Manager to install this library via the repository url:
```
https://github.com/brightdigit/Options.git
```
Use version up to `1.0`.
# Usage
## Versatile Options
Let's say we are using an `Enum` for a list of popular social media networks:
```swift
enum SocialNetwork : Int {
case digg
case aim
case bebo
case delicious
case eworld
case googleplus
case itunesping
case jaiku
case miiverse
case musically
case orkut
case posterous
case stumbleupon
case windowslive
case yahoo
}
```
We'll be using this as a way to define a particular social handle:
```swift
struct SocialHandle {
let name : String
let network : SocialNetwork
}
```
However we also want to provide a way to have a unique set of social networks available:
```swift
struct SocialNetworkSet : Int, OptionSet {
...
}
let user : User
let networks : SocialNetworkSet = user.availableNetworks()
```
We can then simply use ``Options()`` macro to generate both these types:
```swift
@Options
enum SocialNetwork : Int {
case digg
case aim
case bebo
case delicious
case eworld
case googleplus
case itunesping
case jaiku
case miiverse
case musically
case orkut
case posterous
case stumbleupon
case windowslive
case yahoo
}
```
Now we can use the newly create `SocialNetworkSet` type to store a set of values:
```swift
let networks : SocialNetworkSet
networks = [.aim, .delicious, .googleplus, .windowslive]
```
## Multiple Value Types
With the ``Options()`` macro, we add the ability to encode and decode values not only from their raw value but also from a another type such as a string. This is useful for when you want to store the values in JSON format.
For instance, with a type like `SocialNetwork` we need need to store the value as an Integer:
```json
5
```
However by adding the ``Options()`` macro we can also decode from a String:
```
"googleplus"
```
## Creating an OptionSet
We can also have a new `OptionSet` type created. ``Options()`` create a new `OptionSet` type with the suffix `-Set`. This new `OptionSet` will automatically work with your enum to create a distinct set of values. Additionally it will decode and encode your values as an Array of String. This means the value:
```swift
[.aim, .delicious, .googleplus, .windowslive]
```
is encoded as:
```json
["aim", "delicious", "googleplus", "windowslive"]
```
# Further Code Documentation
[Documentation Here](https://swiftpackageindex.com/brightdigit/Options/main/documentation/options)
# License
This code is distributed under the MIT license. See the [LICENSE](LICENSE) file for more info.