Swift枚举和CBCharacteristicProperties

Bra*_*rad 2 enums ios core-bluetooth swift

在使用CoreBluetooth框架将设备设置为外围设备管理器时,我遇到了Swift如何处理枚举的困难.

具体而言,CBMutableCharacteristic初始化需要一个enumproperties自变量:

init!(type UUID: CBUUID!, properties: CBCharacteristicProperties, value: NSData!, permissions: CBAttributePermissions)
Run Code Online (Sandbox Code Playgroud)

CBCharacteristicProperties是一个Int支持枚举.如果使用ObjectiveC,初始化程序将properties通过使用按位OR |运算符接受多个值.在Swift中,enum不直接允许使用按位OR,但可以在rawValues后面的情况下执行它:

let properties = CBCharacteristicProperties.Read.rawValue | CBCharacteristicProperties.Notify.rawValue
Run Code Online (Sandbox Code Playgroud)

现在,properties是类型Int,这意味着它不能传递给上面的初始化程序.('Int' is not convertible to 'CBCharactersiticProperties')因此,我尝试从"raw"值创建枚举的实例:

let cbProperties = CBCharacteristicProperties(rawValue: properties)
Run Code Online (Sandbox Code Playgroud)

但是,在运行时,这将解析为nil.在Int从按位结果或不匹配的任何enum情况.nilproperties参数传递给初始化程序会导致运行时错误.

是否有可能在Swift中实现这一目标?

Ben*_*Ben 6

Objective-C的:

[[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:CHARACTERISTIC_UUID]
                                   properties:CBCharacteristicPropertyNotify |
                                   CBCharacteristicPropertyRead
                                   value:nil
                                   permissions:CBAttributePermissionsReadable]
Run Code Online (Sandbox Code Playgroud)

迅速:

CBMutableCharacteristic(type: CBUUID(string:CHARACTERISTIC_UUID),
                                properties: [CBCharacteristicProperties.Read,CBCharacteristicProperties.Notify],
                                value: nil,
                                permissions: CBAttributePermissions.Readable)
Run Code Online (Sandbox Code Playgroud)