可以在代码中使用swift代码一个本地代码而不是Objective-C

问题描述:

我需要在我的Codename One应用程序中插入本机代码。我是iOS编程中的一名新手,所以我需要学习Objective-C。不过,我读到Swift是Objective-C的继承者,我会对Swift语法感到更加自在。但是我不知道Codename One是否支持Swift。在查看由Codename One生成的iOS源代码时,虽然我不是100%确定,但它看起来像C代码(我可能是错的)。可以在代码中使用swift代码一个本地代码而不是Objective-C

在他的博客Shannah(从代号一)wrote that

代号一种当前编译都记录下来,以普通的旧的C代码,所以我们将在很大程度上不受这样的变化 - 尽管会有一些本地部分是使用需要更新的Objective-C。幸运的是,如果您是Codename One用户,则不需要关注这些细节,因为您使用的是Java。

我不明白这就是为什么我问是否可以在Codename One本机代码中使用Swift代码?

非常感谢您帮助我澄清此主题!

干杯

+0

想知道你是怎么做的?我有同样的问题。 – Schreiby

是的,没有。你现在可以将Swift代码编译成一个静态库(.a文件),并像使用Objective-C代码充当桥梁的任何静态库一样使用它。

使用斯威夫特直接问题是由于以下几个因素:

  • 目前正在建设的时候,我们仍然在使用Xcode中的旧版本,我们做了一个attempt at migrating to the latest但有一个setback。我们会在3.5出现之前有希望地迁移,如果不是,那么不久之后。
    Swift需要一个相对较新版本的xcode,所以直到我们这样做时,嵌入Swift代码才会出现问题。

  • Swift承担ARC。这是我们试图与GC集成的东西,但目前它并不能很好地工作。

  • 我们需要生成Swift存根作为选项,这是有问题的,因为说您有现有的cn1lib或依赖于Objective-C的本机接口它可能会产生冲突。

但让我们回溯一下。 Swift与Objective-C相比是一个巨大的优势,目前它已经很老了。但它不具备一个代号任何开发商主要优点...

  • 这不是更快代号一个转换到C比都斯威夫特和Objective-C

  • 更快不会使代码更清洁,如果你的本地接口中有很多代码,那么你做错了什么。你的大部分代码都是用Java编写的,你可以辩论Java与Swift的优点,但是如果你使用Codename One,那么你几乎选择了Java。

  • 如果您需要使用用Swift编写的应用程序,可以将其打包为静态库。

因此目前在Codename One中确实没有真正的用例。

+0

感谢您的详尽解答。我需要编写的本地代码很小,但我仍然需要学习它。所以我宁愿学习比现在更老的东西。但我明白你的观点;-) – HelloWorld