2016-08-31 1 views
2

long long A와 정의 C 매크로 NSURLResponseUnknownLength가 : 방식으로 인해 매크로에길고 긴 C 매크로를 Swift로 연결하는 방법은 무엇입니까? 재단에서

#define NSURLResponseUnknownLength ((long long)-1) 

스위프트에 브리지 있으며,이 상수는 아니지만 스위프트 응용 프로그램에서, 오브젝티브 C 응용 프로그램에 액세스 할 수 있습니다. 이러한 매크로를 신속하게 보이게하려면 어떻게해야합니까? 내 브리지 헤더에 글로벌 C 함수의 매크로를 포장하려고했습니다

:

long long getNSURLResponseUnknownLength() { 
    return NSURLResponseUnknownLength; 
} 

그러나 getNSURLResponseUnknownLength()에 접근하는 것은 Undefined symbols for architecture 빌드 오류가 발생합니다.

+0

당신의 포장 솔루션 (엑스 코드 8 베타 6에서 테스트) 나를 위해 작동합니다. 'print (getNSURLResponseUnknownLength())'는'-1'을 컴파일, 실행, 인쇄합니다. –

+0

@MartinR 흥미롭게도, Xcode 7.3.1에서는 작동하지 않습니다. 어딘가에서 뭔가 잘못하고 있는거 같아? – JAL

+0

Btw, 여기에 비슷한 문제가 있습니다. 동일한 해결책으로 http://stackoverflow.com/questions/34042017/macro-is-working-in-objective-c-but-not-it-swift입니다. –

답변

3

용액 매크로로부터 새로운 정수 값을 선언 할 수있다 :

const long long myNSURLResponseUnknownLength = NSURLResponseUnknownLength; 

이것은 Int64let 상수 NSURLResponseUnknownLength 브릿지.

사용법 :

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

마틴 R은 문제의 시도가 엑스 코드 (7)에서 엑스 코드 8. 작동 in the comments 언급, 당신은 static로 함수를 선언해야합니다

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

이것은 스위프트 (Swift)와 관련된 알려진 문제가 곧 출시 될 예정입니다.

  • rdar://problem/20462344

    SR-485

    관련 문제