2014-06-24 25 views
3

創建CString的我有一個C API,它採用指向任意的二進制數據與函數簽名類似如下:從NSData的

void receiveData(const char *data, size_t length); 

的橋接報頭進口到這一點夫特具有以下定義:

func receiveData(data: CString, length: UInt) 

我覺得我錯過了一些基本的東西,但我似乎無法弄清楚如何從任意NSData獲得CString - 唯一的選擇似乎是從NSString轉換或作爲字符串文字。我如何創建CString

能夠通過CConstPointer<CChar>會更有意義,但編譯器沒有吧 - 有什麼方法可以修改由橋接頭生成的Swift簽名嗎?

編輯:的CString在Xcode 6 beta 4版本從發佈說明移除:

CString的類型已被刪除。類型爲const char *的值現在爲導入爲ConstUnsafePointer而不是CString的 。將 展開爲字符串的C宏導入爲String。

+0

這可能是一個副本︰http://stackoverflow.com/questions/24147825/cstring-from-nsdata – hotpaw2

+0

@ hotpaw2:不,這是關於從二進制數據,而不是編碼的字符串數據創建一個CString。 – Sam

回答

1

C字符串以空字符結尾。任意二進制數據不需要以空值終止。我認爲問題是橋接機制看到一個char *並認爲「C字符串」。也許如果你把它改爲void *,你會在Swift中得到更合適的類型。

+0

這絕對是這個問題,但它似乎是一個相當沉重的假設,即橋接報頭正在製作 - 一個char *不一定是一個以空字符結尾的字符串。現在我要改變標題,如果沒有人提出更好的解決方案,請給你打勾。 – Sam