當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


Swift OptionSet用法及代碼示例

協議

OptionSet

一種將數學集接口呈現給位集的類型。

聲明

protocol OptionSet : RawRepresentable, SetAlgebra

概述

您使用OptionSet 協議來表示位集類型,其中各個位表示集合的成員。在您的自定義類型中采用此協議可讓您對這些類型執行 set-related 操作,例如成員資格測試、聯合和交集。更重要的是,當使用特定標準實施時,采用此協議不需要您做額外的工作。

創建選項集時,請在類型聲明中包含 rawValue 屬性。為了讓您的類型自動接收 set-related 操作的默認實現,rawValue 屬性必須是符合 FixedWidthInteger 協議的類型,例如 IntUInt8 。接下來,使用每個屬性的原始值的唯一冪(1、2、4、8、16 等)創建唯一選項作為自定義類型的靜態屬性,以便每個屬性可以由單個位表示類型的原始值。

例如,考慮一個名為 ShippingOptions 的自定義類型,它是運送客戶購買的可能方式的選項集。 ShippingOptions 包括類型為 IntrawValue 屬性,用於存儲可用運輸選項的位掩碼。靜態成員 nextDaysecondDayprioritystandard 是唯一的單獨選項。


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]
}

將附加的預配置選項集值聲明為使用包含其他選項值的數組文字初始化的靜態屬性。在該示例中,由於為 express 靜態屬性分配了一個帶有 nextDaysecondDay 選項的數組文字,因此它將包含這兩個元素。

使用選項集類型

當您需要創建選項集的實例時,請將類型的靜態成員之一分配給您的變量或常量。或者,要創建具有多個成員的選項集實例,請分配具有選項集的多個靜態成員的數組文字。要創建一個空實例,請將一個空數組文字分配給您的變量。


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

使用set-related 操作來檢查成員資格並在自定義選項集類型的實例中添加或刪除成員。以下示例顯示了如何根據客戶的購買價格確定免費送貨選項:


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!"

可用版本

iOS 8.0+, iPadOS 8.0+, macOS 10.10+, Mac Catalyst 13.0+, tvOS 9.0+, watchOS 2.0+

相關用法


注:本文由純淨天空篩選整理自apple.com大神的英文原創作品 OptionSet。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。