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 中使用带有 UnsafeMutableRawPointer 或 UnsafeMutablePointer 参数的 ObjC 函数?