我需要在我的Codename One应用中插入本机代码。我是iOS编程的全新手,所以我需要学习Objective-C。但是我读到Swift是Objective-C的继承者,我觉得Swift语法更舒服。但我不知道是否在Codename One中支持Swift。在查看由Codename One生成的iOS源代码时,虽然我不是100%肯定,但它看起来像C代码(我可能错了)。
在他的博客Shannah(来自Codename One)wrote that
Codename One目前将所有内容编译为普通的旧C代码,因此我们在很大程度上不会受到这种更改的影响 - 尽管会有一些本机部分使用需要更新的Objective-C。幸运的是,如果您是Codename One用户,则无需关注这些细节,因为您使用的是Java。
我不明白为什么我在询问是否可以在Codename One本机代码中使用Swift代码?
非常感谢帮助我澄清这个话题!
干杯
答案 0 :(得分:1)
是和否。您现在可以将Swift代码编译为静态库(.a文件),并像使用Objective-C代码作为桥梁的任何静态库一样使用它。
由于以下几个因素,直接使用Swift存在问题:
目前我们在构建时仍在使用较旧版本的xcode,我们制作了attempt at migrating to the latest但是setback。我们将在3.5出现之前有希望地迁移,如果不是那么之后不久 Swift需要一个相对较新版本的xcode,所以在我们这样做之前,嵌入Swift代码会有问题。
Swift假设ARC。这是我们尝试与GC集成的东西,但此时它并没有真正起作用。
我们需要生成Swift存根作为选项,这是有问题的,因为你有现有的cn1lib或依赖于Objective-C的本机接口,它可能会产生冲突。
但是让我们回过头来。与Objective-C相比,Swift是一个巨大的优势,而现在它已经很老了。但它对Codename One开发者来说并没有任何重大优势......
当Codename One转换为C时,速度并不快于Swift和Objective-C
如果您的原生界面中有很多代码,那么它不会让代码更清晰,那么您做错了。大多数代码都是用Java编写的,你可以讨论Java与Swift的优点,但如果你使用的是Codename One,那么你几乎选择了Java。
如果您需要使用Swift编写的应用程序,可以将其打包为静态库。
因此,目前在Codename One中没有真正的Swift用例。