OptionSet 中 rawValue 的正确值?

Correct value of rawValue in an OptionSet?

在使用 OptionSet 时,我认为 rawValue 总是表示位的组合。在下面的示例中,“all”值没有正确的 rawValue。为零。

如果在 init 函数中放置一个断点,它确实会在初始化“所有”选项集时命中 0 值。

struct Options: OptionSet {

    init(rawValue: Int16) {
        self.rawValue = rawValue
    }
    
    let rawValue: Int16

    static let option1 = Options(rawValue:1)
    static let option2 = Options(rawValue:2)
    static let option3 = Options(rawValue:4)

    static let all = [option1,option2,option3]
}

为了做一些有建设性的事情,我已经实现了符合 ExpressibleByArrayLiteral 协议的特殊 init 函数。但无济于事,因为它没有被调用,当用于静态初始化时(但是当用于非静态初始化时它会被调用)。

struct Options: OptionSet {
...

    public init(arrayLiteral: Element...) {
        for element in arrayLiteral {
            
        }
    }


您需要将 all 声明为 Options

类型
static let all: Options = [option1,option2,option3]

例子

print(Options.all) // prints Options(rawValue: 7)