ios - 我可以在 Swift 应用程序中引用 Ada 库吗?
问题描述
我对 Swift 比较陌生(我过去曾修改过 Python 和 HTML)——但我目前正在与一个小组一起开发一个应用程序。
这个应用程序已经作为一个用 Ada 编写的桌面程序存在,我们希望将它移植到 Swift 并推出一个 iPhone 应用程序。
我的理解是我可以(可能?)使用转换器将 Ada 转换为 C,然后在 Swift 中引用 C?这是正确的,还是因为不熟悉这些语言而忽略了一些东西?
如果正确,由于我在 Swift 和 C 方面的经验很少,我将如何实际执行此操作?
这是一个非常重要的问题,所以感谢您的任何帮助或见解!编辑:所说的桌面应用程序是开源的,可供所有人使用-我不打算窃取任何人的工作
解决方案
我假设您可以轻松地提取要在 iPhone 程序中使用的 Ada 程序部分。如果您要移植的代码具有其他依赖项,那么您必须确保您也可以获得 iOS 的所有这些依赖项。如果您使用 UI 工具包,这可能会非常困难。
要在 Swift 中调用外部函数,通常需要使用桥接头。您的目标的桥接头包含 Swift 应该能够调用的类、函数和变量的 C 和 Objective-C 声明。只要您要调用的语言可以导出与 C 兼容的绑定(应该是 Ada 的情况),那么您就可以通过在桥接头中声明它们来调用这些绑定。
如果您要使用的桌面 Ada 程序部分可以轻松地隔离在库(静态或动态)中,并且您能够将该库构建为 ARM Mach-O 库,那么只需声明您想从应用程序桥接头中的库中使用的函数。您可以参考GNAT User's Guide for Native Platforms: Interfaceing to C以获取用于将 Ada 函数公开给 C 的指令,并且通过将其公开给 C,您也将其公开给 Swift。我会先尝试这个,因为维护几乎未修改的 Ada 源几乎肯定会比维护 Ada 源的机械翻译 C 版本更容易。
如果这不起作用,那么是的,将 Ada 源代码翻译成 C 代码也将允许您从 Swift 引用它。您还必须确保您需要调用的函数在您的桥接头中声明。
推荐阅读
- javascript - 如何过滤包含数组数据的对象的数组?
- hadoop - 尽管添加了会话设置,但查询仍需要时间
- c - 使用来自 C 应用程序的 db2 CLI/ODBC 连接更新表错误?
- angular - 为什么使用异步过滤器会导致无休止的请求?
- angular - 如何使用 Angular 6 将 json 对象数组绑定到 angular-dual-listbox?
- devexpress - LookUpEdit 中的 DevExpress GridView
- php - PHP 7:使用 XADES-BES 签署 XML 文档
- android - monekeyrunner 无法返回“getProperty”和“getSystemProperty”的值
- angular - 如何在 ngFor 中删除元素后为所有元素设置动画
- c# - 在嵌套类中手动调用模型状态验证失败