Objc <-> Swift 通用函数的 Swift 兼容性

Posted

技术标签:

【中文标题】Objc <-> Swift 通用函数的 Swift 兼容性【英文标题】:Objc <-> Swift compatibility for swift generic function 【发布时间】:2017-12-17 14:25:00 【问题描述】:

以下功能:

func popTo<ViewController>(viewController: ViewController.Type, animated: Bool) where ViewController: UIViewController

仅适用于 Swift。我需要在 objc 代码中使用这个方法。在重新考虑了一堆选项之后,我不确定如何使它与 objc 兼容。可能最简单的选择是创建另一个以某种方式将其暴露给 objc 的函数,但我不确定哪种解决方案最适合处理它。

【问题讨论】:

您需要通用占位符吗?否则直接说@objc func popTo(viewController: UIViewController.Type, animated: Bool) @Hamish 不幸的是,我确实需要这个,所以我不知道该怎么做。 你是如何使用它的?你能告诉我们实现吗? @Hamish 那是一条相当长的链:/ 通常在某些时候它会回到 swift 实现,但由于用 objc 编写的旧实现,它也会进入 objc。 嗯,好的,但是可以显示通用占位符是如何使用的吗?不能直接使用viewController 元类型(在我上面的建议中)吗? 【参考方案1】:
func popTo<ViewController>(viewController: ViewController.Type, animated: Bool) where ViewController: UIViewController

等价于

func popTo(viewController: UIViewController, animated: Bool) 

它是“objc-able”

【讨论】:

不,不一样。第一个传递类型,以便您例如。写 popTo(MyViewControllerSubclass) 而不是 popTo(myInstanceOfMyViewControllerSubclass) 在你的代码中。当您没有实例时,这一点非常重要。

以上是关于Objc <-> Swift 通用函数的 Swift 兼容性的主要内容,如果未能解决你的问题,请参考以下文章

我们可以为返回可选值的 swift 函数添加 @objc 吗?

在Swift中使用类型名称的通用函数

符合自定义协议的通用函数 - Swift

Swift 4 添加手势:覆盖 vs @objc

在 Swift 中使用带有 UnsafeMutableRawPointer 或 UnsafeMutablePointer 参数的 ObjC 函数?

Swift初见Swift函数