在使用 CoreBluetooth 框架将设备设置为外设管理器时,我在 Swift 处理枚举的方式上遇到了困难。
具体来说,CBMutableCharacteristic 的初始化程序为 properties
参数采用了一个enum
:
init!(type UUID: CBUUID!, properties: CBCharacteristicProperties, value: NSData!, permissions: CBAttributePermissions)
CBCharacteristicProperties
是一个 Int
支持的枚举。如果使用 ObjectiveC,初始化程序将通过使用按位或 |
运算符接受 properties
的多个值。在 Swift 中,enum
不允许直接使用按位或,但可以在支持大小写的 rawValues
上执行它:
let properties = CBCharacteristicProperties.Read.rawValue | CBCharacteristicProperties.Notify.rawValue
现在,properties
是Int
类型,这意味着它不能不 传递给上述初始化程序。 ('Int' 不能转换为 'CBCharactersiticProperties'
)因此,我尝试从“原始”值创建枚举实例:
let cbProperties = CBCharacteristicProperties(rawValue: properties)
但是,在运行时这会解析为 nil
。按位 OR 产生的 Int
不匹配任何 enum
情况。将 nil
的 properties
参数传递给初始化程序会导致运行时错误。
是否可以在 Swift 中完成此操作?
最佳答案
objective-C :
[[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:CHARACTERISTIC_UUID]
properties:CBCharacteristicPropertyNotify |
CBCharacteristicPropertyRead
value:nil
permissions:CBAttributePermissionsReadable]
swift :
CBMutableCharacteristic(type: CBUUID(string:CHARACTERISTIC_UUID),
properties: [CBCharacteristicProperties.Read,CBCharacteristicProperties.Notify],
value: nil,
permissions: CBAttributePermissions.Readable)
关于ios - Swift 枚举和 CBCharacteristicProperties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29420894/