2

Foundation にはNSURLResponseUnknownLength、次のように定義されたC マクロがあり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 で機能することをコメントstaticで述べています。Xcode 7 では、関数を次のように宣言する必要があります。

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

これは Swift の既知の問題であり、今後のリリースで修正される予定です。

  • SR-485

  • rdar://problem/20462344

于 2016-08-31T18:21:01.607 に答える