2

在 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构建错误。

4

1 回答 1

3

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

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

于 2016-08-31T18:21:01.607 回答