A type that presents a mathematical set interface to a bit set.
SDK
- Xcode 8.0+
Framework
- Swift Standard Library
Declaration
Overview
You use the Option
protocol to represent bitset types, where individual bits represent members of a set. Adopting this protocol in your custom types lets you perform set-related operations such as membership tests, unions, and intersections on those types. What’s more, when implemented using specific criteria, adoption of this protocol requires no extra work on your part.
When creating an option set, include a raw
property in your type declaration. For your type to automatically receive default implementations for set-related operations, the raw
property must be of a type that conforms to the Fixed
protocol, such as Int
or UInt8
. Next, create unique options as static properties of your custom type using unique powers of two (1, 2, 4, 8, 16, and so forth) for each individual property’s raw value so that each property can be represented by a single bit of the type’s raw value.
For example, consider a custom type called Shipping
that is an option set of the possible ways to ship a customer’s purchase. Shipping
includes a raw
property of type Int
that stores the bit mask of available shipping options. The static members next
, second
, priority
, and standard
are unique, individual options.
Declare additional preconfigured option set values as static properties initialized with an array literal containing other option values. In the example, because the express
static property is assigned an array literal with the next
and second
options, it will contain those two elements.
Using an Option Set Type
When you need to create an instance of an option set, assign one of the type’s static members to your variable or constant. Alternatively, to create an option set instance with multiple members, assign an array literal with multiple static members of the option set. To create an empty instance, assign an empty array literal to your variable.
Use set-related operations to check for membership and to add or remove members from an instance of your custom option set type. The following example shows how you can determine free shipping options based on a customer’s purchase price: