Конвертировать код Objective-C в Swift
Я работал с nrf51x. У меня есть пример кода, написанный на Obj-C. Я не смог преобразовать его в Swift.
uint8_t value = ACTIVATE_AND_RESET_REQUEST;
[self.bluetoothPeripheral writeValue:[NSData dataWithBytes:&value length:sizeof(value)] forCharacteristic:self.dfuControlPointCharacteristic type:CBCharacteristicWriteWithResponse];
Я старался
var value: UInt8 = DfuOperations.VALIDATE_FIRMWARE_REQUEST.rawValue
let ptr = UnsafePointer<Void>(value)
let data = NSData(ptr, length: sizeofValue(value))
dfuPeripheral!.writeValue(data, forCharacteristic: self.dfuControlPointCharacteristic, type: CBCharacteristicWriteType.WithResponse)
и этот
var value: UInt8 = DfuOperations.VALIDATE_FIRMWARE_REQUEST.rawValue
let data = NSData(&value, length: sizeofValue(value))
Может кто-нибудь мне помочь? большое спасибо
2 ответа
Решение
Благодаря ответу @Robert я смог найти решение. Наконец, я создал метод, который записывает массив [UInt8] в CBCharacteristic. Вот код:
func updateValueForCharacteristic(characteristic: CBCharacteristic, value: [UInt8], writeType: CBCharacteristicWriteType = CBCharacteristicWriteType.WithResponse){
let data = NSData(bytes: value, length: sizeofValue(value))
dfuPeripheral!.writeValue(data, forCharacteristic: characteristic, type: writeType)
}
Класс ниже строится без ошибок. Я использую Xcode 7.1.
import Foundation
import CoreBluetooth
class Test {
func test(bluetoothPeripheral: CBPeripheral, dfuControlPointCharacteristic: CBCharacteristic) {
let value = UInt8(ACTIVATE_AND_RESET_REQUEST.rawValue)
let encodedValue = NSData(bytes: [value], length: sizeof(UInt8))
bluetoothPeripheral.writeValue(encodedValue, forCharacteristic: dfuControlPointCharacteristic, type: CBCharacteristicWriteType.WithResponse)
}
}