2014-11-04 4 views
2

목표 - C 내가 신속한 코드로 오브젝트 C 코드를 변환하는 시도스위프트 브리지 메서드 호출 버그

typedef void(^CompletionHandler)(NSError *error); 
- (void)openWithCompletionHandler:(CompletionHandler)completionHandler authType:(AuthType)authType, ...; 

방법.

test().openWithCompletionHandler({ (NSError) -> Void in 
      }, AuthType.Test) 

을하지만 이것은 컴파일 에러 코드 "통화 추가 인수"입니다 :

나는 시도했다.

어떻게해야합니까?

답변

0

Swift는 Objective-C 메소드를 가변 인수 * (...)와 연결하지 않으므로 Swift에서 선언 한 openWithCompletionHandler (: authType :) 메소드가 전혀 표시되지 않습니다.

오류 메시지가 표시되면 test()AnyObject을 반환하며, Swift는 Objective-C 방법을 사용하면 편리하다는 것을 알 수 있습니다. UIDocument은 하나의 클로저를 유일한 인수로 취하는 openWithCompletionHandler() 메서드를 가지고 있으므로 Swift는 메서드에 대해 너무 많은 인수를 제공한다고 불평하고 있습니다 (원하는 것은 아니지만). 충분히 맑은가요?

가능한 경우 Objective-C 방법을 Swift가 이해할 수있는 것으로 리팩터링해야합니다.


*이 완전히 사실이 아니다는 것을 참고 - 유사 - NSArrayinitWithObjects: 방법은 가변 매개 변수가있는 스위프트 초기화에 다리를하지만, 애플이 그 일을 뭔가 비공개을하고있는 것으로 보인다 인수와 반환 값을 옵션으로할지 어떨지를 명확히 할 수있는 방법에 대해 설명합니다.