swift 代码可以用于代号 One 本机代码而不是 Objective-C

Can swift code be used in Codename One native code instead of Objective-C

我需要在我的代号 One 应用程序中插入本机代码。我是 iOS 编程的新手,所以我需要学习 Objective-C。但是我读到 Swift 是 Objective-C 的后继者,我会觉得 Swift 语法更舒服。但是不知道代号一是否支持Swift。在查看代号一生成的 iOS 源代码时,虽然我不是 100% 确定,但它看起来像 C 代码(我可能是错的)。

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

Codename One currently compiles everything down to plain old C code so we would be largely unaffected by such a change – although there would be some native portions that use Objective-C that would need updating. Luckily, if you’re a Codename One user, you don’t need to concern yourself with these details because you are working in Java.

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

非常感谢你帮我澄清这个话题!

干杯

是也不是。您现在可以将 Swift 代码编译为静态库(.a 文件),然后像使用任何静态库一样使用它,其中 Objective-C 代码仅充当桥梁。

由于以下几个因素,直接使用 Swift 是有问题的:

  • 目前我们在构建时仍然使用旧版本的xcode,我们制作了一个attempt at migrating to the latest but had a setback。我们希望在 3.5 发布之前进行迁移,如果没有,那么不久之后。
    Swift 需要一个相对较新的 xcode 版本,因此在我们这样做之前,嵌入 Swift 代码将会有问题。

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

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

但让我们回溯一下。 Swift 比现在已经很老的 Objective-C 有很大的优势。但是对于Codename One的开发者来说并没有什么大的优势...

  • 它并不比代号一转换为 C 更快,它比 Swift 和 Objective-C

  • 都快
  • 它不会使代码更清晰,如果您的本机界面中有很多代码,那么您做错了什么。无论如何,你的大部分代码都在 Java 中,你可以争论 Java 与 Swift 的优点,但如果你使用代号一,那么你几乎选择了 Java。

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

所以目前在代号一中真的没有 Swift 的真正用例。