swift

swift枚举之OptionSet

2022-12-20  本文已影响0人  奔跑吧小蚂蚁

1、构建选项集合类型

要求:
1、一个类型为整型的原始值(rawValue)
2、一个初始化构造器。
对于结构体来说,Swift 通常都会自动提供一个逐一成员构造器(memberwise initializer),所以你并不需要自己写一个。rawValue 是位域底层的存储单元。每个选项都应该是静态的常量,并使用适当的值初始化了其位域。
如:

struct Sports: OptionSet {

    let rawValue: Int

    static let running = Sports(rawValue: 1) //里面的数字是自己定义的,但不能随意定义
    static let cycling = Sports(rawValue: 2)
    static let swimming = Sports(rawValue: 4)
    static let fencing = Sports(rawValue: 8)
    static let shooting = Sports(rawValue: 32)
    static let horseJumping = Sports(rawValue: 512)
}

2、使用:

//使用
    func test() {

        let triathlon: Sports = [.swimming,.fencing]
        if triathlon.contains(.shooting) {
            print("包含shooting")
        } else {
            print("no包含shooting")
        }

        if triathlon.contains(.swimming) {
            print("包含")
        }

    }

️注意:编译器并没有自动把 2 的整数次幂按照升序赋给你的选项——这些工作应该由你来做,你需要正确地赋值,使得每个选项代表 rawValue 中的其中一个位。如果你给选项赋予了连续的整数(1,2,3,…),就会导致无法分辨出 .swimming(值为 3)和 [.running, .cycling](值为 1 + 2)。
说明:遵从 OptionSet 并不意味着遵从 Sequence 和 Collection 协议,所以你无法使用 count 来确定集合中有几个元素,也无法使用 for 循环来遍历选择的选项。从根本上说,一个选项集合仅仅是简单的整数值。

(如有错误欢迎斧正)
参考:http://swift.gg/2016/10/25/swift-option-sets/

作者:悃破
链接:https://www.jianshu.com/p/8e9dc62beb66
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

上一篇下一篇

猜你喜欢

热点阅读