我想导入一个名为" Beethoven"的Swift框架。进入Objective-C项目。我通过cocoapods导入这个框架。 问题是框架是用纯粹的swift编写的。由于这些类不是NSObject的子类,因此无法直接在我的objC类中使用它们。
我是Swift的新手,也是objC的中间人,但我认为可能有2个解决方案:
1 - 修改整个库:这可能不是最佳解决方案。 2 - 使用一个新类,它作为swift框架和我的objC代码之间的接口。我认为第二种解决方案在所需的时间和精力方面将是更好的选择。
实际上下面给出的帖子解释了修改纯粹的快速课程,但我不知道如何在我的情况下应用这个。 How to use Swift non-NSObject subclass in Objective-C
正如我所提到的,我不是一个非常有能力的程序员,可能有更好的解决方案来解决这个问题。如果有人可以帮助我并建议将纯Swift框架集成到我的objC项目中的最佳解决方案,我将不胜感激。
答案 0 :(得分:0)
NSObject通常不是唯一的问题。 Swift具有Objective-C不支持的许多功能。仅举几例:swift值类型(struct' s),带附加值的swift枚举。如果库使用其中任何一个,则无法为其自动生成Objective-C头(.h)。
现场调整库的代码可能会有效,但如果您需要再次更新该库,则可能需要更长时间的工作。
您的第二种方法听起来更好:在库顶部创建一个与Objective-C兼容的层,该层导出需要使用@objc
导出的方法并调整类型。如果您这样做,请考虑为原始库做出PR贡献,以便每个人都可以在Objective-C项目中使用它,并且当快速代码更改时,您共同负责更新它。
第三种方法实际上是将你应用程序的某些部分重写为Swift。根据使用该库的应用程序部分的大小以及它与应用程序其余部分的隔离程度,这可能会或可能不会更容易。