Bra*_*rad 2 enums ios core-bluetooth swift
在使用CoreBluetooth框架将设备设置为外围设备管理器时,我遇到了Swift如何处理枚举的困难.
具体而言,CBMutableCharacteristic初始化需要一个enum为properties自变量:
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情况.nil将properties参数传递给初始化程序会导致运行时错误.
是否有可能在Swift中实现这一目标?
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)
| 归档时间: |
|
| 查看次数: |
2318 次 |
| 最近记录: |