gpt4 book ai didi

Swift 3.0 OptionSet 位测试

转载 作者:搜寻专家 更新时间:2023-10-30 22:32:39 24 4
gpt4 key购买 nike

使用以下选项集:

struct StatusOptions : OptionSet {
let rawValue: Int
static let CountdownDuration0 = StatusOptions(rawValue: 1 << 0)
static let CountdownDuration1 = StatusOptions(rawValue: 1 << 1)
static let CountdownDuration2 = StatusOptions(rawValue: 1 << 2)
static let CountdownDuration3 = StatusOptions(rawValue: 1 << 3)
static let CountdownDuration4 = StatusOptions(rawValue: 1 << 4)
static let CountdownDuration5 = StatusOptions(rawValue: 1 << 5)
static let HomeMode = StatusOptions(rawValue: 1 << 6)
static let AwayMode = StatusOptions(rawValue: 1 << 7)

static let Disarmed: StatusOptions = []
static let ArmedHome: StatusOptions = .HomeMode
static let ArmedAway: StatusOptions = .AwayMode
static let ArmedBoth: StatusOptions = [.HomeMode, .AwayMode]
static let ArmingCountdown: StatusOptions = [.CountdownDuration0, .CountdownDuration1, .CountdownDuration2, .CountdownDuration3, .CountdownDuration4, .CountdownDuration5]
}

如何比较一个字节

var statusFlags: UInt8 = 0b00000000

到选项?

以下是我认为可行的方法,但会导致 playground 错误:

if (statusFlags & .Disarmed) {
print("Disarmed")
}

谢谢

最佳答案

因为 .Disarmed 是零,你说:

if statusFlags == .Disarmed

或者更简单:

if statusFlags.isEmpty

对于其他值,您说,例如:

if statusFlags.contains(.CountdownDuration3)

这就是 OptionSet 的全部。您使用集合 操作,而不是算术位操作。

但是要让它起作用,以便您可以利用 OptionSet 的优点,statusFlags 需要 StatusOptions。您可以通过 StatusOptions rawValue: initializer:

来做到这一点
let statusFlags = StatusOptions(rawValue:0b00000000)
statusFlags.isEmpty // true

(请注意,在 Swift 3 中,可能甚至不会使用像 .Disarmed 这样的零位掩码。零只是一个空集。)

关于Swift 3.0 OptionSet 位测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39800709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com