美文网首页swift
swift枚举之OptionSet

swift枚举之OptionSet

作者: 奔跑吧小蚂蚁 | 来源:发表于2022-12-20 15:50 被阅读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
    来源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    相关文章

      网友评论

        本文标题:swift枚举之OptionSet

        本文链接:https://www.haomeiwen.com/subject/egiyqdtx.html