【问题标题】:importing Pure Swift Framework in Objective-C Project在 Objective-C 项目中导入 Pure Swift 框架
【发布时间】:2018-09-17 22:57:25
【问题描述】:

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

我是 Swift 的新手和 objC 的中级,但我认为可能有两种解决方案:

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

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

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

【问题讨论】:

  • 您可以以某种方式围绕贝多芬框架创建一些 Swift “包装器”,并将其转换为支持 Objective-C 的结构。比从包装器内与 API 交互...

标签: ios objective-c swift frameworks


【解决方案1】:

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

当场调整库的代码可能会奏效,但如果您需要再次更新该库,它可能更长期有效。

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

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

【讨论】:

  • 谢谢,成功的话我会加课的。
猜你喜欢
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2016-04-05
  • 1970-01-01
相关资源
最近更新 更多