• Swift 实现Bitmask Option(Enum)


    在Swift中实现ObjC中的NS_OPTION不是通过enum,而是通过conform RawOptionSetType protocol的struct来实现的。

    代码如下:

    struct Test : RawOptionSetType {
        typealias RawValue = UInt
        private var value: UInt = 0
        init(_ value: UInt) { self.value = value }
        init(rawValue value: UInt) { self.value = value }
        init(nilLiteral: ()) { self.value = 0 }
        static var allZeros: Test { return self(0) }
        static func fromMask(raw: UInt) -> Test { return self(raw) }
        var rawValue: UInt { return self.value }
         
        static var None: Test { return self(0) }
        static var T1: Test { return Test(1 << 0) }
        static var T2: Test { return Test(1 << 1) }
    }
    

     查看  RawOptionSetType 会发现还有equable 和  BitwiseOperationsType没有实现。这其实是Swift标准库通过泛型实现的可以参考NShipster上的这篇文章

    虽然Apple用泛型全局函数实现这些协议中的方法减少了不少样板代码(boilerplate),但是这个struct还是有不少boilerplate。此处有一个swift option 生成器

  • 相关阅读:
    第1周作业
    第0次作业
    第三周作业
    随笔1
    第一次作业
    第二周作业
    第零次作业
    第四周作业
    第三周作业
    第二次作业
  • 原文地址:https://www.cnblogs.com/csutanyu/p/4205596.html
Copyright © 2020-2023  润新知