ios - 在 Objective-C 项目中导入纯 Swift 框架

标签 ios objective-c swift frameworks

我想将一个名为“Beethoven”的 Swift 框架导入到 Objective-C 项目中。我通过 cocoapods 导入这个框架。 问题是框​​架是用纯 swift 编写的。由于这些类不是 NSObject 的子类,因此它们不能直接在我的 objC 类中使用。

我是 Swift 的新手,并且是 objC 的中级,但我认为可能有 2 个解决方案:

1-修改整个库:这可能不是最佳解决方案。 2-使用一个新类,它充当 swift 框架和我的 objC 代码之间的接口(interface)。我认为就所需时间和精力而言,第二种解决方案将是更好的选择。

实际上,下面给定的帖子解释了修改纯 swift 类,但我不知道如何在我的情况下应用它。 How to use Swift non-NSObject subclass in Objective-C

正如我所提到的,我不是一个非常有能力的程序员,对于这个问题可能有更好的解决方案。如果有人可以帮助我并提出将纯 Swift 框架集成到我的 objC 项目中的最佳解决方案,我将不胜感激。

最佳答案

NSObject 通常不是唯一的问题。 Swift 有许多 Objective-C 不支持的功能。仅举几例:swift 值类型(结构体)、带有附加值的 swift 枚举。如果库使用其中任何一个,则无法为其自动生成 Objective-C header (.h)。

当场调整库的代码可能会起作用,但从长远来看,如果您需要再次更新该库,可能会需要更多工作。

你的第二种方法听起来更好:在库顶部创建一个与 Objective-C 兼容的层,该层导出需要使用 @objc 导出的方法并调整类型。如果您选择这种方式,请考虑为原始库做出 PR 贡献,以便每个人都可以在 Objective-C 项目中使用它,并且您在 swift 代码更改时共同承担更新它的责任。

第三种方法实际上是将应用程序的某些部分重写为 Swift。这可能会或可能不会更容易,具体取决于使用该库的应用程序部分的大小以及它与应用程序其余部分的隔离程度。

关于ios - 在 Objective-C 项目中导入纯 Swift 框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49717772/

相关文章:

objective-c - 为什么在子类中将基类的读写属性重新声明为只读时编译器会发出警告?

ios - 当观察者未完成时如何将 AVPlayerItem 设置为 nil

ios - 有没有 "tag"通讯员?

ios - 使用 ObservableObject 时 View 不会更新

ios - 无法让 CALayer 在 UIView 中显示

ios - 使用 EXIF 数据的 Swift base64 图像编码

objective-c - CIFilter 名称的常量

ios - UIViewAutoresizing flexible Height+Top 或 Height+Bottom 何时有意义?它有什么作用?

ios - 使用drawInRect时如何设置文字颜色?

ios - 设置 TextField 专注于文本删除