Protocol

OptionSet

A type that presents a mathematical set interface to a bit set. 数学的なセットインターフェイスをビットセットに与える型。

Declaration 宣言

protocol OptionSet

Overview 概要

You use the OptionSet 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. あなたは、OptionSetプロトコルを使ってビットセット型を表すことができます、そこにおいて個々のビットはセットのメンバを表します。この型をあなたのあつらえの型において採用することは、あなたにセット関連演算を行わせます、例えば、それらの型上での帰属テスト、合併、そして交叉など。おまけに、特定の基準を使って実装される時、このプロトコルの採用はあなたの方での余分な作業を必要としません。

When creating an option set, include a rawValue property in your type declaration. For your type to automatically receive default implementations for set-related operations, the rawValue property must be of a type that conforms to the FixedWidthInteger 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. あるオプションセットを作成する場合は、rawValueプロパティをあなたの型宣言に加えてください。あなたの型が自動的に省略時の実装をセット関連の演算に対して受け取るようにするには、rawValueプロパティは、FixedWidthIntegerプロトコルに準拠する型の1つでなければなりません、例えばIntまたはUInt8など。次に、それぞれが特有なオプションをあなたのあつらえの型の静的プロパティとして作成してください、特有な2の冪(1、2、4、8、16、およびそれ以降)を各個別プロパティの生の値に対して使います、それで各プロパティはその型のもつ生の値からなるある単一ビットによって表されることができます。

For example, consider a custom type called ShippingOptions that is an option set of the possible ways to ship a customer’s purchase. ShippingOptions includes a rawValue property of type Int that stores the bit mask of available shipping options. The static members nextDay, secondDay, priority, and standard are unique, individual options. 例えば、ShippingOptionsと呼ばれるあつらえの型を考えてください、それは顧客の購入品を出荷する可能な方法のオプションセットです。ShippingOptionsは、型IntrawValueプロパティを含みます、それは可能な出荷オプションのビットマスクを格納します。静的メンバnextDay, secondDaypriority、そしてstandardは特有で、別個のオプションです。


struct ShippingOptions: OptionSet {
    let rawValue: Int


    static let nextDay    = ShippingOptions(rawValue: 1 << 0)
    static let secondDay  = ShippingOptions(rawValue: 1 << 1)
    static let priority   = ShippingOptions(rawValue: 1 << 2)
    static let standard   = ShippingOptions(rawValue: 1 << 3)


    static let express: ShippingOptions = [.nextDay, .secondDay]
    static let all: ShippingOptions = [.express, .priority, .standard]
}

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 nextDay and secondDay options, it will contain those two elements. 追加のあらかじめ構成されるオプションセット値を、他のオプション値を含んでいる配列リテラルで初期化される静的プロパティとして宣言してください。例において、express静的プロパティはnextDaysecondDayオプションを持つ配列リテラルを割り当てられるので、それはそれら2つの要素を含みます。

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. あなたがあるオプションセットのインスタンスを作成する必要がある場合は、その型のもつ静的メンバの1つをあなたの変数または定数に割り当ててください。あるいはまた、複数のメンバをもつ1つのオプションセットインスタンスを作成するには、オプションセットの複数の静的メンバをもつ配列リテラルを割り当ててください。空のインスタンスを作成するには、空の配列リテラルをあなたの変数に割り当ててください。


let singleOption: ShippingOptions = .priority
let multipleOptions: ShippingOptions = [.nextDay, .secondDay, .priority]
let noOptions: ShippingOptions = []

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: セット関連演算を使って、帰属を確認したり、あなたのあつらえのオプションセット型のインスタンス由来のメンバの追加や削除を行ってください。以下の例は、どうやってあなたが顧客の購入品価格を基に無償出荷オプションを判定できるかを示します:


let purchasePrice = 87.55


var freeOptions: ShippingOptions = []
if purchasePrice > 50 {
    freeOptions.insert(.priority)
}


if freeOptions.contains(.priority) {
    print("You've earned free priority shipping!")
} else {
    print("Add more to your cart for free priority shipping!")
}
// Prints "You've earned free priority shipping!"

Topics 話題

Required Initializer 必須イニシャライザ

When creating your own option set, implement this initializer with a fixed-width integer, like Int, as the RawValue type. あなた独自のオプションセットを作成する時、このイニシャライザを固定長整数、IntなどをRawValue型として使って実装してください。

Element

Relationships 関係

Inherits From 継承元

Conforming Types これらの型が準拠

See Also 参照

Sets 集合