Swift桥接方法调用bug

时间:2014-11-04 02:15:44

标签: swift objective-c-swift-bridge

Objective-C方法

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

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

我试过了:

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

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

我该怎么办?

1 个答案:

答案 0 :(得分:0)

Swift并没有将Objective-C方法与变量参数*(...)联系起来,所以你声明的`openWithCompletionHandler(:authType :)方法并没有出现在一切都在斯威夫特。

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

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


  

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