簡體   English   中英

Swift枚舉和CBCharacteristicProperties

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM