来自<netinet in.h =“”>的INADDR_LOOPBACK宏未在swift中导入

时间:2015-12-02 11:49:23

标签: ios swift macos ipv4

我试图使用没有文档的peertalk框架。 在他们的obj-c示例中,他们使用INADDR_LOOPBACK宏,并且示例正在运行。 但是当我尝试在swift中做同样的事情时,系统会给我一个未解决的标识符错误。 任何人都知道如何解决它?

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

2 个答案:

答案 0 :(得分:7)

Swift 3更新:自Swift 3起,INADDR_LOOPBACK 被导入Swift。因此,添加

就足够了
#include <netinet/in.h>

到桥接头文件,但自定义定义不是 需要了。

旧答案:由于某种原因,宏定义

#define INADDR_LOOPBACK         (u_int32_t)0x7f000001
来自<netinet/in.h>

而不是导入到Swift中。 问题可能(u_int32_t)演员,因为 其他宏如

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

导入。

一种解决方案是定义

let INADDR_LOOPBACK = UInt32(0x7f000001)
在你的Swift代码中

或者,添加

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

到桥接头文件并在Swift代码中使用kInAddrLoopback。 这不容易出错,因为您不必重复常量。

答案 1 :(得分:0)

来自Apple文档。

  

将简单宏声明为全局常量,并转换复数   宏转换为函数。