2016-08-18 32 views
1

我试图到C的API转换在夫特3 XCode中8个β6.C API迁移到夫特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,将其作为工作细跟夫特:

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

然后它如何在swift 2.2和更旧版本的xcode beta版本中运行3.检查我的实际库https://github.com/ankitthakur/SwiftPing。我只是将其升级到XCode 8 Beta 6. –

+0

这可能是一个不确定性问题,只是现在才显示出来。 – Alexander

+0

好吧,谢谢它的工作。 C级api整合/迁移确实是一种痛苦。 –

相关问题