2016-08-18 2 views
1

Я пытаюсь преобразовать C APIs в Swift 3 в XCode 8 Beta 6.C апи миграция Swift 3 в XCode 8 бета 6

int payloadSize = 100 
char tempBuffer[payloadSize]; 
memset(tempBuffer, 7, payloadSize); 

// Construct the payload. 
NSData *payload = [[NSData alloc] initWithBytes:tempBuffer length:payloadSize]; 

До XCode 8 бета-3, он работает нормально с Swift, как :

let payloadSize = 100 
var tempBuffer:[CChar]? 
memset(&tempBuffer, 7, Int(payloadSize)) 

// Construct the ping packet. 
let payload:NSData = NSData(bytes: tempBuffer!, length: Int(payloadSize)) 

Но в последней версии бета-версии XCode это создает сбой.

+1

Что говорит аварии? –

+0

Если это сработало до этого по чистой случайности (или неудача :) - 'tempBuffer' является необязательным, для которого вы никогда не назначали значение. –

+0

это просто крушение, ничего не говорится. он сбой при создании объекта NSData. Работа над XCode 8 beta 6. –

ответ

1

Вопрос стоит на линии var tempBuffer:[CChar]?. Это объявление переменной, называемой tempBuffer, тип которой Optional<Array<CChar>>. Однако он не определяет этот массив. Когда вы пытаетесь выполнить memset, он не работает, потому что нет выделенной памяти.

Вместо использования memset, попробуйте вместо этого:

let payloadSize = 100 
let buffer = [UInt8](repeatedValue: 7 count: payloadSize) 

let payload = NSData(bytes: buffer, length: buffer.count) 
+0

Затем как это работает в быстрых версиях бета-версии xcode версии 2.2 и старше с быстрым 3. Оформить мою фактическую библиотеку https://github.com/ankitthakur/SwiftPing. Я только обновляю его до XCode 8 Beta 6. –

+0

Вероятно, это детерминированная проблема, которая только что проявилась сейчас. – Alexander

+0

хорошо, спасибо, что сработало. C-уровень интеграции/миграции api - это действительно боль. –

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