2014-06-14 5 views
1

가져온 (그리고 복잡한) Objective-C 인터페이스의 일부 멤버 기능이 Swift에서 사용할 수없는 이유를 이해하는 데 문제가 있습니다. 나는 노출 된 Objective-C 헤더를 신속하게 볼 수있는 방법이 있습니다.

나는 브리징 - 헤더 파일이 있습니다

#import "EvernoteSDK.h" 

을 나는

let userStore = EvernoteUserStore() 
userStore.initWithSession(session) 

initWithSession가 빠른 코드를 사용할 수 없습니다 제의 ViewController의 일부 멤버 함수를 사용할 수 없지만 그 이유는 무엇입니까?

목적-C 헤더 보여줍니다

@interface EvernoteUserStore : ENAPI 
+ (instancetype)userStore; 
- (id)initWithSession:(EvernoteSession *)session; 

내가 노출 목표 - C 헤더, ​​나는 맹 글링의 작동 방식을 이해 수를 볼 수있는 경우 초기화 호출이와 결합 스위프트에서

답변

1

건설자. 즉, 목표-C의

EvernoteUserStore *userStore = [[EvernoteUserStore alloc] initWithSession:session]; 

let userStore = EvernoteUserStore(session:session); 

공구 오브젝티브 C의 initWithSomething: 명을 인식하게되고, EvernoteUserStore 경우

init(something something : SomeType) 

에 대응하는 변환 init 메소드는 다음과 같습니다.

init(session session: EvernoteSession!) 
+0

대단히 감사합니다. 당신의 대답이 내 문제를 해결했습니다. 나는 어디에서 맹 글링 규칙을 찾을 수 있습니까? 나는 C# 및 C++ 배경에서 왔고 명명 규칙이 도구 동작을 지시 할 때 어색한 것으로 보입니다. – ChaosSpeeder

+1

@ChaosSpeeder 나는 그다지 친숙하지 않다. Swift 자신은 아니지만, 'initWith ...'이니셜 라이저와 factory'sometypeWith ... '클래스 메소드 (예 :'arrayWithObject :'of' NSArray'). 이 두 가지는 오랫동안 지속되는 코코아 규칙을 따르므로이 도구는 사용자가 Swift의 새로운 규칙과 일치하도록 번역합니다. 다른 방법은 그대로 유지해야합니다. – dasblinkenlight

+0

애플의 상호 운용성 문서에는 오랜 논의가있었습니다. –