2014-11-04 67 views
2

Objective-C的方法夫特橋接方法調用錯誤

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

我試圖對象C代碼轉換成SWIFT代碼。

我想:

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

但這是代碼編譯錯誤 「呼叫額外的參數」。

我該怎麼辦?

回答

0

Swift不會橋接帶有可變參數*(...)的Objective-C方法,所以您聲明的openWithCompletionHandler(:authType :)方法在Swift中完全不顯示。

從您收到的錯誤消息中,我可以看出test()返回AnyObject,Swift很高興地調用任何Objective-C方法。 UIDocument有一個openWithCompletionHandler()方法,它只接受一個閉包作爲唯一參數,所以Swift抱怨說你給方法提供了太多的參數,即方法(即使它不是你想要的)。夠清楚了嗎?

如果可能的話,你需要重構Objective-C方法,使其能夠理解Swift。


*請注意,這是不完全正確 - 在NSArrayinitWithObjects:方法橋接到一個可變參數參數斯威夫特初始化,但蘋果似乎在做一些非公開的,使這項工作 - 類似他們如何能夠澄清參數和返回值是否應該是可選的。