【发布时间】:2015-04-02 19:26:21
【问题描述】:
在使用 CoreBluetooth 框架将设备设置为外设管理器时,我在 Swift 如何处理枚举方面遇到了困难。
具体来说,CBMutableCharacteristic 的初始化程序为 properties 参数采用 enum:
init!(type UUID: CBUUID!, properties: CBCharacteristicProperties, value: NSData!, permissions: CBAttributePermissions)
CBCharacteristicProperties 是一个支持Int 的枚举。如果使用 ObjectiveC,初始化程序将通过使用按位 OR | 运算符接受 properties 的多个值。在 Swift 中,enum 不直接允许使用按位 OR,但可以在支持 case 的 rawValues 上执行它:
let properties = CBCharacteristicProperties.Read.rawValue | CBCharacteristicProperties.Notify.rawValue
现在,properties 的类型为 Int,这意味着它可以不传递给上述初始化程序。 ('Int' is not convertible to 'CBCharactersiticProperties') 因此,我尝试从“原始”值创建枚举实例:
let cbProperties = CBCharacteristicProperties(rawValue: properties)
但是,在运行时这会解析为 nil。由按位 OR 产生的 Int 与任何 enum 情况都不匹配。将 nil 的 properties 参数传递给初始化程序会导致运行时错误。
是否有可能在 Swift 中实现这一点?
【问题讨论】:
标签: ios swift enums core-bluetooth