2015-11-06 6 views
1

Я работаю с nrf51x. У меня есть образец кода, написанный в Obj-C. Я не смог преобразовать его в Свифт.Преобразование Objective-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)) 

Может ли один помочь мне? Большое спасибо

+0

Заканчивать ссылке в этом [ответ] (http://stackoverflow.com/a/33564737/5222077) – kye

+0

@kye преобразования, предоставляемые этим инструментом не работает , –

+0

Я не думаю, что обновлено до swif 2.1 еще – kye

ответ

0

Благодаря ответу @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) 
} 
0

Класс ниже строит без ошибок. Я использую 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) 
    } 
} 
+0

Почему вы используете 'UInt32', когда исходный код использует' UInt8'? – Sulthan

+0

@ Султан: Вы правы. Я внесла поправки в код – Verticon

+0

Спасибо @RobertVaessen –