在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