如何将一个长长的C宏连接到Swift



在Foundation中有一个C宏NSURLResponseUnknownLength定义为long long:

#define NSURLResponseUnknownLength ((long long)-1)

由于宏被桥接到Swift的方式,这个常量可以在Objective-C应用程序中访问,但不能在Swift应用程序中访问。我怎样才能使这些宏对Swift可见?

我已经尝试在我的桥接头中的全局C函数中包装宏:

long long getNSURLResponseUnknownLength() {
    return NSURLResponseUnknownLength;
}

但是访问getNSURLResponseUnknownLength()会导致Undefined symbols for architecture构建错误

解决方案是在宏中声明一个新的常数值:

const long long myNSURLResponseUnknownLength = NSURLResponseUnknownLength;

这个桥接NSURLResponseUnknownLength作为Int64 let常数。

用法:

if urlResponse.expectedContentLength == myNSURLResponseUnknownLength {
    // ...
}

Martin R在评论中提到,问题中的尝试在Xcode 8上有效。在Xcode 7中,你需要将函数声明为static:

static long long getNSURLResponseUnknownLength() { /* */ }

这是Swift的一个已知问题,希望在即将发布的版本中修复。

    sr - 485
  • rdar://problem/20462344

相关内容

  • 没有找到相关文章

最新更新