2015-12-02 11 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

我不认为你明白我的问题 –