在使用CoreBluetooth框架将设备设置为外围设备管理器时,我在Swift如何处理枚举方面遇到了困难。
具体来说,CBMutableCharacteristic的初始化程序为enum
参数采用properties
:
init!(type UUID: CBUUID!, properties: CBCharacteristicProperties, value: NSData!, permissions: CBAttributePermissions)
CBCharacteristicProperties
是Int
支持的枚举。如果使用ObjectiveC,则初始化程序将通过使用按位OR properties
运算符来接受|
的多个值。在Swift中,enum
不允许直接使用按位OR,但是可以在支持案例的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
情况都不匹配。将nil
参数的properties
传递给初始化程序会导致运行时错误。是否可以在Swift中完成此操作?
最佳答案
Swift的语法与Objective C中的语法完全相同-使用|用于分隔值的字符-
var someCharacteristic=CBMutableCharacteristic(type: CBUUID(string:"someUUID"),
properties:CBCharacteristicProperties.Read|CBCharacteristicProperties.Write ,
value: nil,
permissions: CBAttributePermissions.Readable|CBAttributePermissions.Writeable)
更新
尽管此语法在Xcode 6.2的iOS上有效,但不适用于OS X目标-看起来像个bug