是否可以在React Native中使用我的Swift库?

时间:2017-04-14 00:07:24

标签: javascript android swift amazon-web-services react-native

我决定将我的移动应用程序端项目的开发从原生swift交换到跨平台的React本机。当我尝试并开始这样做时发生的直接障碍是想知道如何访问我在Swift中通过Cocoapods在本机中使用的所有库。例如,我使用了大量的Amazon Web Services Swift库和Chameleon Swift颜色库。有没有办法转换所有这些swift库/使它们可以在React Native中访问,或者我是否必须查找所有这些库的native / javascript版本?

1 个答案:

答案 0 :(得分:1)

有很多预构建的React Native组件都是由Facebook团队和反应原生社区编写的。但是,从您的问题看来,您有一些非常具体的本机代码,您需要找到在未来的React Native应用程序中运行的方法。 对于你提出的信息,我可以给你的问题“我应该使用哪些库(如果有的话)”的最佳答案是“它取决于”。

我为Android和iOS构建了一些React Native移动应用程序,在这些应用程序中Swift中存在的功能有时可以用JavaScript编写 - 例如,使用fetch调用Web服务内置于React Native的api。如果您正在调用的AWS服务接受基本HTTP请求,那么您可以使用JavaScript自行编写。

如果您正在做一些更复杂的事情,例如从S3下载文件,您可能需要使用类似社区构建的react-native-fetch-blob之类的东西,这在我需要下载文件时效果很好。您需要在请求标头中提供所需的任何SWS Auth令牌。

另一个选择是编写自己的Native Module。这些是应用逻辑的块,您可以通过javascript在本机中调​​用。它们非常强大,因为它们允许您在直接原生应用程序中完成之前可以完成的任何操作。它们是用原生平台语言编写的,所以用于iOS的Obj-C,用于Android的Java,(但如果你有野心,你可以用Swift编写它们 - 我还没试过)。然后,这些本机模块可以调用您已经存在的AWS Swift库。我的直觉说这可能是最适合您需求的解决方案。本机模块的明显缺点是它们是原生模块,因此您需要为您支持的每个平台编写一个(可能是iOS和Android)。

还可以选择将React Native合并到existing application中。您可以慢慢地在React Native中构建应用程序的新组件,或者以零碎的方式将当前逻辑重写为React Native,一次只需要更小的一点,这样整个任务就显得不那么令人生畏了。

最后,Chameleon Swift似乎是一个UI库。如果你使用React Native,似乎你不想继续使用这个库,因为React Native是移动应用程序的“前端”(除此之外)。但是,如果你觉得如此渴望,你可以编写一个原生模块,理论上可以调用变色龙库为你提供像颜色的十六进制值这样的东西。我不知道这是否会运行良好并且可能不会非常高效,所以我不建议您尝试在直接反应原生应用程序中继续使用此库(但是如果您使用混合应用程序,请确保往上看!)。 React native拥有它自己的酷工具,但是,您可以使用它来使您的应用更加精彩(hereherehere)。

Phew,我希望这很有用。