我正在寻找一种在Swift中的插件架构中实现的方法.
用例
一个应用程序,fx.CLI,有一个文件夹,可以在其中放置插件,并在应用程序启动时加载.
要求
我试过的
我曾经Process
开始使用可执行文件,我也可以添加参数.但这不符合我的要求.
我发现了这篇文章如何完成,但这需要使用NSBundle
和Objective-C这样做也没有用.
我真的不确定如何解决这个问题.任何有关正确方向的帮助或指示都将不胜感激.
Swift 目前没有稳定的 ABI,因此您还不能依赖本机接口。(预计 Swift 4 将解决这个问题。)
我现在可以想到两个选项,但都依赖于在主机和插件之间定义某种通信协议。如果您无法使用 Objective-C,您还必须自己实现您的需求(功能内省等)。
低于 C ABI。对于您需要的每个函数,请使用注释在 Swift 中的被调用方实现它@convention(c)
,并在标头中的调用方声明它以进行外部链接。您无法两次实现一个函数,因此您应该定义一个基于回调的 API,插件可以将自身注册到其中。
定义一个(例如,基于套接字的)通信协议并编写要在每个插件中导入的 Swift 源文件。使插件可执行,在主机应用程序启动时启动通信。
我个人更喜欢选项 2,因为它不需要与链接器等混合,并且您还可以获得定义 Swift 类型和函数以供插件使用的额外好处。此外,由于插件是分叉子插件,因此它可能会崩溃而不影响主机。
归档时间: |
|
查看次数: |
581 次 |
最近记录: |