如何将长C宏连接到Swift? 基础有C宏 NSURLResponseUnknownLength ,定义为长长< /> >: #define NSURLResponseUnknownLength ((long long)-1)

如何将长C宏连接到Swift? 基础有C宏 NSURLResponseUnknownLength ,定义为长长< /> >: #define NSURLResponseUnknownLength ((long long)-1),c,swift,macros,swift2,long-long,C,Swift,Macros,Swift2,Long Long,由于宏桥接到Swift的方式,该常数在Objective-C应用程序中是可访问的,但在Swift应用程序中是不可访问的。如何使这些宏对Swift可见 我已尝试将宏包装在桥接标头中的全局C函数中: long long getNSURLResponseUnknownLength() { return NSURLResponseUnknownLength; } 但是访问getnsurresponseunknownlength()会导致未定义的架构符号生成错误。解决方案是从宏声明一个新的常量值

由于宏桥接到Swift的方式,该常数在Objective-C应用程序中是可访问的,但在Swift应用程序中是不可访问的。如何使这些宏对Swift可见

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

long long getNSURLResponseUnknownLength() {
    return NSURLResponseUnknownLength;
}

但是访问
getnsurresponseunknownlength()
会导致
未定义的架构符号
生成错误。

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

const long long myNSURLResponseUnknownLength = NSURLResponseUnknownLength;
这将
nsurresponseunknownlength
桥接为
Int64
let
常量

用法:

if urlResponse.expectedContentLength == myNSURLResponseUnknownLength {
    // ...
}
Martin R提到问题中的尝试在Xcode 8上有效。在Xcode 7中,您需要将函数声明为static:

static long long getNSURLResponseUnknownLength() { /* */ }
这是Swift的一个已知问题,有望在即将发布的版本中修复

  • rdar://problem/20462344


您的包装解决方案适合我(使用Xcode 8 beta 6测试)<代码>打印(getnsurresponseunknownlength())编译、运行和打印
-1
@MartinR interest,对我来说不适用于Xcode 7.3.1。也许我在什么地方做错了什么?顺便说一句,这里有一个类似的问题,有着相同的解决方案:)@MartinR说到Swift,你已经看到了一切!顺便说一句,您可以使用
静态long getnsurresponseeunknownlength(){…}
使其在Xcode 7.3.1中工作。当然,定义一个常数更好。