swift枚举之OptionSet

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/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 关于 Swift 重要这个文档所包含的准备信息, 是关于开发的 API 和技术的。这个信息可能会改变, 根据这个文...
    无沣阅读 4,661评论 1 27
  • 常量与变量使用let来声明常量,使用var来声明变量。声明的同时赋值的话,编译器会自动推断类型。值永远不会被隐式转...
    莫_名阅读 550评论 0 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 4,223评论 1 10
  • Swift是苹果于2014年推出的一种新语言。Swfit 将替换 Objective-C,成为 iOS 和 Mac...
    titvax阅读 694评论 0 1
  • 1.横.纵构图 四月的海边有点冷,海水还很凉,但是只有淡季的时候人不多 。 没有太阳 海边雾蒙蒙的 地平线连着天和...
    王温柔丶阅读 352评论 1 2

友情链接更多精彩内容