无法使用在 Swift 中使用的 Objective-C 中定义的 unwind segue

Cannot use unwind segue defined in Objective-C used in Swift

我有一个模态视图控制器,它位于我从不同控制器呈现的导航控制器中,并且基于不同的上下文,它应该 return 到不同的控制器。

基本上,无论谁实现了 segue 标识符,都应该是此流程的 return 点。

我有以下流程以模态方式呈现整个流程:

A (Objective-C) -> B (Objective-C) -> C (Swift) -> D (Swift)

A、B、C实现了相同的segue方法。

Class A 和 B 执行 Objective-C 版本:

- (IBAction)unwindToRootTabBarViewController:(UIStoryboardSegue *)unwindSegue {}

而 class C 实现了 Swift 版本:

override func canPerformUnwindSegueAction(_ action: Selector, from fromViewController: UIViewController, withSender sender: Any) -> Bool {
        return true
}

@IBAction public func unwindToRootTabBarViewController(segue: UIStoryboardSegue) {}

当试图展开到 Objective-C 中编写的 C Class 时,它崩溃了,因为我找不到该方法,即使它在那里:

** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[App.ClassCViewController unwindToRootTabBarViewController:]: unrecognized selector sent to instance 0x7ff035c634b0'

知道为什么会这样吗?

想了想把参数类型改成方法从:

@IBAction public func unwindToRootTabBarViewController(segue: UIStoryboardSegue){}

@IBAction public func unwindToRootTabBarViewController(_: UIStoryboardSegue){}

成功了!

我认为这与 Swift 和 Objective-C 处理方法签名的方式有关。