2

Objective-C 法

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

オブジェクトの C コードを迅速なコードに変換しようとしました。

私は試した :

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

しかし、これはコード「呼び出しの余分な引数」コンパイルエラーです。

私は何をすべきか?

4

1 に答える 1

0

Swift は可変引数* ( ) を使用して Objective-C メソッドをブリッジしない...ため、宣言した `openWithCompletionHandler(:authType:) メソッドは Swift ではまったく表示されません。

あなたが得ているエラーメッセージから、SwiftがObjective-Cメソッドを喜んで呼び出す をtest()返していることがわかります。には、単一のクロージャを唯一の引数として取るメソッドがあるため、Swift は、そのメソッドの引数が多すぎると不平を言っています (それはあなたが望むものではありませんが)。十分にクリア?AnyObjectUIDocumentopenWithCompletionHandler()

可能であれば、Objective-C メソッドを Swift が理解できるものにリファクタリングする必要があります。


*これは完全に真実ではないことに注意してください -NSArray initWithObjects:メソッドは可変引数パラメータを使用して Swift イニシャライザにブリッジされていますが、Apple はそれを機能させるために非公開のことを行っているようです - 引数と戻り値はオプションかどうか。

于 2014-11-04T02:51:41.570 に答える