【问题标题】:Can swift code be used in Codename One native code instead of Objective-Cswift代码可以在Codename One本机代码中使用而不是Objective-C吗
【发布时间】:2016-11-09 13:17:20
【问题描述】:

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

在他的博客 Shannah(来自 Codename One)wrote that

Codename One 目前将所有内容编译为普通的旧 C 代码,因此我们在很大程度上不会受到这种更改的影响——尽管会有一些使用 Objective-C 的本机部分需要更新。幸运的是,如果您是 Codename One 用户,则无需担心这些细节,因为您使用的是 Java。

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

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

干杯

【问题讨论】:

  • 想知道您是如何做到这一点的?我也有同样的问题。

标签: ios swift codenameone native-code


【解决方案1】:

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

由于以下几个因素,直接使用 Swift 存在问题:

  • 目前我们在构建时仍在使用旧版本的 xcode,我们创建了一个 attempt at migrating to the latest,但有一个 setback。我们希望在 3.5 发布之前迁移,如果不是那么不久之后。
    Swift 需要一个相对较新的 xcode 版本,所以在我们这样做之前,嵌入 Swift 代码会有问题。

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

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

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

  • 它并不快,因为 Codename One 转换为 C 比 Swift 和 Objective-C 都快

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

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

因此,目前代号一中的 Swift 确实没有真正的用例。

【讨论】:

  • 感谢您的详尽回答。我需要编写的本机代码很小,但我仍然必须学习它。所以我更喜欢学习现代的东西而不是旧的东西。但我理解你的意思;-)
  • 这个回复是最新的吗?我想使用 iOS 的原生库来使用相机,我看到有几个库是用 Swift 编写的:它们不是直接可用的吗?我是 Xcode 的新手,我需要的不仅仅是 Capture API 和 Camera Kit cn1Lib。
  • 是的,但是你仍然可以使用用 Swift 编写的编译库,因为 Swift 和 Objective-C 大部分是兼容的。大多数此类库可以使用 cocoapods 安装并“按原样”使用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-19
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多