2015-12-02 12 views
0

我試圖使用沒有文檔的peertalk框架。 在他們的obj-c示例中,他們使用INADDR_LOOPBACK宏,並且示例正在運行。 但是,當我嘗試在swift中執行相同的操作時,系統會拋出未解決的標識符錯誤。 任何人都知道如何解決它?來自<netinet/in.h>的INADDR_LOOPBACK宏未在swift中導入

http://www.gnu.org/software/libc/manual/html_node/Host-Address-Data-Type.html

+0

我會查看你必須擁有的源代碼,看看這個宏是幹什麼的,然後把它翻譯成合適的Swift代碼。該文件說明它代表127.0.0.1。將C轉換成Swift很有趣。 Swift 2似乎稍微簡單一些。 – gnasher729

+0

就是這樣,源代碼中沒有任何暗示宏已經存在於obj-c 中看到了宏是假設的,但無法將它放入框架接受的變量中。 –

回答

6

更新:作爲夫特3,INADDR_LOOPBACK 的導入到夫特。因此,它足以

#include <netinet/in.h> 

添加到橋接頭文件,而是一個自定義的定義不再需要 。


老答案:出於某種原因,宏定義

#define INADDR_LOOPBACK   (u_int32_t)0x7f000001 

<netinet/in.h>導入斯威夫特。 問題可能(u_int32_t)投,因爲其他 宏象

#define INADDR_NONE    0xffffffff    /* -1 return */ 

進口。

一種解決方法是在你的斯威夫特代碼來定義

let INADDR_LOOPBACK = UInt32(0x7f000001) 

或者,添加

#include <netinet/in.h> 
const uint32_t kInAddrLoopback = INADDR_LOOPBACK; 

到橋接報頭文件,並在銀行代碼使用kInAddrLoopback。 這不太容易出錯,因爲您不必重複常量。

+0

釘着它,謝謝 –

+0

@ thibautnoah:不客氣! (我已經添加了另一個可能的解決方案:) –

+0

欣賞它,確實這樣更有效率 –

0

從Apple文檔。

聲明簡單的宏作爲全局常量,並將複雜的宏 轉換爲函數。對於夫特3

+0

我不認爲你明白我的問題 –