Swift 枚举和 CBCharacteristicProperties
Swift enum and CBCharacteristicProperties
在使用 CoreBluetooth 框架将设备设置为外设管理器时,我 运行 对如何 Swift 处理枚举感到困难。
具体来说,CBMutableCharacteristic 的初始化程序采用 enum
作为 properties
参数:
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' is not convertible to 'CBCharactersiticProperties'
) 因此,我尝试从 "raw" 值创建枚举实例:
let cbProperties = CBCharacteristicProperties(rawValue: properties)
但是,在运行时这会解析为 nil
。按位或运算得到的 Int
与任何 enum
情况都不匹配。将 properties
参数的 nil
传递给初始化程序会导致运行时错误。
是否可以在 Swift 中完成此操作?
语法 Swift 与 Objective C 完全相同 - 使用 |分隔值的字符 -
var someCharacteristic=CBMutableCharacteristic(type: CBUUID(string:"someUUID"),
properties:CBCharacteristicProperties.Read|CBCharacteristicProperties.Write ,
value: nil,
permissions: CBAttributePermissions.Readable|CBAttributePermissions.Writeable)
更新
虽然此语法适用于 iOS 和 Xcode 6.2,但不适用于 OS X 目标 - 看起来像一个错误
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)
在使用 CoreBluetooth 框架将设备设置为外设管理器时,我 运行 对如何 Swift 处理枚举感到困难。
具体来说,CBMutableCharacteristic 的初始化程序采用 enum
作为 properties
参数:
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' is not convertible to 'CBCharactersiticProperties'
) 因此,我尝试从 "raw" 值创建枚举实例:
let cbProperties = CBCharacteristicProperties(rawValue: properties)
但是,在运行时这会解析为 nil
。按位或运算得到的 Int
与任何 enum
情况都不匹配。将 properties
参数的 nil
传递给初始化程序会导致运行时错误。
是否可以在 Swift 中完成此操作?
语法 Swift 与 Objective C 完全相同 - 使用 |分隔值的字符 -
var someCharacteristic=CBMutableCharacteristic(type: CBUUID(string:"someUUID"),
properties:CBCharacteristicProperties.Read|CBCharacteristicProperties.Write ,
value: nil,
permissions: CBAttributePermissions.Readable|CBAttributePermissions.Writeable)
更新 虽然此语法适用于 iOS 和 Xcode 6.2,但不适用于 OS X 目标 - 看起来像一个错误
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)