将Objective-C项目合并到Swift;什么是最好的方法?

时间:2017-04-19 13:19:58

标签: ios objective-c swift

我想将基于Objective-C的大型iOS项目迁移到Swift。那么最好的方法是什么:将Swift文件导入Objective-C,或者将Objective-C项目导入一个全新的Swift项目?什么是最快的?

由于

5 个答案:

答案 0 :(得分:3)

在我将项目迁移到Swift之后,我可以说在这个问题上没有银弹。它实际上取决于您正在工作的团队中设置的应用程序流程。

从我的观点和经验来看,您应该采用现有项目并开始使用Swift编写所有新逻辑并且并行尝试以现代方式重写应用程序的业务律师。例如网络层,数据库层。通过这种方式,您可以减少应用程序的回归并获得受控的迁移流程。

<强>优点:

  • 新逻辑将出现在Swift中。
  • 逐步迁移将平衡 消退。
  • 支持无法重写为Swift的遗留代码
  • 以Swift方式编写代码(协议,函数,泛型,结构)

<强>缺点

  • 时间
  • 回归应用
  • 重写代码。

答案 1 :(得分:1)

如果您要开始一个新项目,目的是将来只使用Swift,那么我将创建一个新的Swift项目,然后链接到您的Objective-C框架。这就是我们在工作中所做的事情,随着时间的推移,我们一直在从Objective-C项目中删除任何未使用的内容。这可能不比将所有内容导入同一个项目更快,但会使您的代码与旧的Objective-C代码分离。

答案 2 :(得分:1)

这是一个非常复杂的问题,答案是:取决于...... 我想在回答你的问题之前还有几个问题要做:

  • 您的项目是否“开放”,您的团队正在开发相同代码库的新功能?或者有一个坚实可靠的代码库,只是稍作修改?
  • 您的公司能否在Swift中使用新工程完全支持“新版本”?

基本上,做一个大的重构(因为语言迁移)也涉及重新设计工作,如果你只是转录代码库,大多数事情将无法工作,如果你这样做,你将失去所有Swift的好处,并且没有胜利的情况来改变你的代码。

在我看来,如果你要制作一个新版本的应用程序,创建一个新项目是一件好事。更清洁,更好,但就像我说过会有很多工作和重新设计。

否则,只需将Swift代码嵌入到运行Objective-C的应用程序中,就会造成很多麻烦和混乱。但速度更快,您可以继续使用新功能并在应用上实施改进。

答案 3 :(得分:1)

所以,这是我的问题的2美分: 如果新代码部分需要,我建议慢速代码转换或者重构为Swift。 此外,如果转换后的代码当前正在其他项目(功能分支等)中使用,则无法确保它仍然可以相应地工作。

我希望你有单位测试,因为那些可以使生活更轻松。无论如何,请考虑应用程序功能的回归测试方面。您使用的库现在必须是框架(某些库可能无法编译为Framework,请注意这一点)。

如果你真的想转换代码库,我会这样做。

  1. 考虑整个应用层并在此层内 具体课程。

  2. 开始为这些类编写测试(你也可以在Swift中编写),单元测试,集成测试,UI测试

  3. 将类转换为swift类(请注意,某些逻辑可能会发生变化,其他函数也会受到影响)

  4. 实现桥接头(如果需要),您可以将其用作其他接口的应用层接口 - 这甚至可以提高您对不同代码部分一起使用的理解。如果你注意到一些奇怪的声明。东西是公开的,来自不同类别或其他东西的随机访问太多。别碰这个。事实上,请注意下来

  5. 对您的小变更进行广泛测试

  6. 重新开始下一堂课

  7. 如果所有课程都已在您当前的应用程序层上完成,那么您什么都没有。做得好。现在看看你的笔记。

  8. 继续下一层。

  9. 简而言之:我只会将那些部分转换为需要改变的Swift(重构,新功能,错误等等)。如果代码正常运行,并且您没有看到其他原因,那么,现在它是Swift&#34;,我只会考虑转换,如果我真的有时间,那么你可能会破坏工作代码甚至是设置的体系结构,这在某些方面对Swift和Objective-C有所不同。

    如果你真的觉得你是这样的人:我会开始写测试;-) 单元,集成和UI测试。这将帮助您使用CURRENT代码库,也可以使用未来的代码库,无论是在Objective-C还是Swift中。 将代码转换为Swift是一个很好的帮助。

答案 4 :(得分:0)

我认为最好的方法是将Objective-C项目导入到新的Swift中。因为您可以使用objective c to swift converter。它节省了数千个工作时间。