当前位置: 首页>>编程示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。