2016-06-29 2 views
12

Я попытался запустить следующий код в скор 3Swift 3 изменения для метода GetBytes

var values = [UInt8](count:data!.length, repeatedValue:0) 
data!.getBytes(&values, length:data!.length) 

где данные типа данных 'Data' (NSData это изменение 'Data', как на стрижа 3 руководящих принципов)

Я не могу запустить вышеуказанный код в Swift 3. Компилятор дает ошибку, что «Аргумент Повторное значение должно предшествовать аргументу». Эта же строка кода работала в Swift 2.2

Каким будет решение?

+0

Хотя вопрос отличается немного, ответ должен быть таким же: http://stackoverflow.com/questions/38090320/writing-data-to-an-nsoutputstream-in-swift-3 – Desdenova

ответ

15

Это означает, что аргументы, заказ был отменен в Swift 3.

Для NSData:

var values = [UInt8](repeating:0, count:data!.length) 
data.getBytes(&values, length: data!.length) 

Для данных:

var values = [UInt8](repeating:0, count:data!.count) 
data.copyBytes(to: &values, count: data!.count) 
+1

Это было для ранняя версия Swift 3. Для текущего Swift 3 и для Swift 4 вы должны использовать ответ @ svd. – Moritz

26

Для Swift3 просто использовать следующее:

let array = [UInt8](yourDataObject) 

Это ' все, люди!)

+0

Как вы это используете? Я пытаюсь преобразовать следующее из Objective-C: int16_t \t значение \t = 0; Результат CGFloat = NAN; if (tempCharacteristic) { [[tempCharacteristic value] getBytes: & value length: sizeof (value)]; результат = (CGFloat) значение/10.0f; } // tempCharacteristic - это CBCharacteristic – Surz

+0

Я боюсь, но для достижения желаемого результата вам нужно сделать несколько шагов. К сожалению, у меня нет большого опыта работы с ЦБ, но, как я вижу, вам нужно значение Int16, а затем разделите его на Float. С моей точки зрения, вы можете достичь этого следующим образом: let bytes = [UInt8] (tempCharacteristic.value); let pointer = UnsafePointer (байты); let fPointer = pointer.withMemoryRebound (до: Int16.self, емкость: 2) { return $ 0 }; let value = Int16 (fPointer.pointee); Надеюсь, это поможет. (Конечно, удалите все точки с запятой;)) – sVd

+0

Большое спасибо за ваш указатель @sVd. У меня все еще есть проблемы с преобразованием фрагмента - не могли бы вы проверить мой вопрос? https://stackoverflow.com/questions/45287488/trouble-converting-nsdata-objective-c-code-to-swift – Surz

Смежные вопросы