Как мне установить Maven с Yum?

const uint8_t *reportData = [data bytes];

переводится в

let reportData = UnsafePointer<UInt8>(data.bytes)

. Тогда reportData имеет тип UnsafePointer<UInt8>, и вы можете получить к нему доступ, как в (Objective-) C:

if (reportData[0] & 0x01) == 0 { ... }

Далее

bpm = reportData[1];

почти идентичен в Swift. Вы должны явно конвертировать из UInt8 в UInt16, потому что - в отличие от (Objective-) C - Swift не подразумевает конвертацию между типами:

bpm = UInt16(reportData[1]) 

Объединяя это:

func getHeartBPMData(characteristic: CBCharacteristic!) {
    let data = characteristic.value
    let reportData = UnsafePointer<UInt8>(data.bytes)
    var bpm : UInt16
    if (reportData[0] & 0x01) == 0 {
        bpm = UInt16(reportData[1])
    } else {
        bpm = UnsafePointer<UInt16>(reportData + 1)[0]
        bpm = CFSwapInt16LittleToHost(bpm)
    }

    // ...
}

Обратите внимание, что большинство ваших переменных можно объявить как константы с let, а не var. Вместо

bpm = CFSwapInt16LittleToHost(bpm)

вы можете использовать конструктор littleEndian:, который доступен для всех целых типов:

bpm = UInt16(littleEndian: bpm)

Обновление для Swift 3/4:

func getHeartBPMData(characteristic: CBCharacteristic) {
    guard  let reportData = characteristic.value else {
        return 
    }

    let bpm : UInt16
    if (reportData[0] & 0x01) == 0 {
        bpm = UInt16(reportData[1])
    } else {
        bpm = UInt16(littleEndian: reportData.subdata(in: 1..<3).withUnsafeBytes { $0.pointee } )
    }

    // ...
}
130
задан Malvolio 23 September 2011 в 17:47
поделиться