2

Objective-C 方法

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

我试图将对象 c 代码转换为 swift 代码。

我试过了 :

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

但这是代码“调用中的额外参数”编译错误。

我应该怎么办?

4

1 回答 1

0

Swift 不会将 Objective-C 方法与可变参数* ( ...) 连接起来,因此您声明的 `openWithCompletionHandler(:authType:) 方法根本不会出现在 Swift 中。

从您收到的错误消息中,我可以看出它test()正在返回一个AnyObjectSwift 很乐意在其上调用任何 Objective-C 方法的方法。UIDocument有一个将单个闭包作为其唯一参数的方法,因此 Swift 抱怨您为该openWithCompletionHandler()方法提供了太多参数(即使它不是您想要的)。够清楚吗?

如果可能,您需要将 Objective-C 方法重构为 Swift 可以理解的内容。


*请注意,这并不完全正确 - 该NSArray initWithObjects:方法被桥接到带有可变参数的 Swift 初始化程序,但 Apple 似乎正在做一些非公开的事情来使其工作 - 类似于他们如何能够澄清参数和返回值应该是可选的或不是。

于 2014-11-04T02:51:41.570 回答