[英]Swift enum and CBCharacteristicProperties
在使用CoreBluetooth框架將設備設置為外圍設備管理器時,我在Swift如何處理枚舉方面遇到了困難。
具體來說,CBMutableCharacteristic的初始化程序為properties
參數采用一個enum
:
init!(type UUID: CBUUID!, properties: CBCharacteristicProperties, value: NSData!, permissions: CBAttributePermissions)
CBCharacteristicProperties
是一個Int
支持的枚舉。 如果使用ObjectiveC,則初始化程序將使用按位OR |
接受properties
的多個值。 運營商。 在Swift中, enum
不允許直接使用按位OR,但是可以對支持案例的rawValues
進行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中完成此操作?
Objective-C的:
[[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:CHARACTERISTIC_UUID]
properties:CBCharacteristicPropertyNotify |
CBCharacteristicPropertyRead
value:nil
permissions:CBAttributePermissionsReadable]
迅速:
CBMutableCharacteristic(type: CBUUID(string:CHARACTERISTIC_UUID),
properties: [CBCharacteristicProperties.Read,CBCharacteristicProperties.Notify],
value: nil,
permissions: CBAttributePermissions.Readable)
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.