【问题标题】:Swift bridging method call bugSwift 桥接方法调用错误
【发布时间】:2014-11-04 02:15:43
【问题描述】:

Objective-C 方法

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

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

我试过了:

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

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

我该怎么办?

【问题讨论】:

    标签: swift objective-c-swift-bridge


    【解决方案1】:

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

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

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


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 2015-10-28
      相关资源
      最近更新 更多