码迷,mamicode.com
首页 > 编程语言 > 详细

Swift 实现Bitmask Option(Enum)

时间:2015-01-06 13:42:55      阅读:248      评论:0      收藏:0      [点我收藏+]

标签:

在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 生成器

 

Swift 实现Bitmask Option(Enum)

标签:

原文地址:http://www.cnblogs.com/csutanyu/p/4205596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!