Swift插件架构

前端之家收集整理的这篇文章主要介绍了Swift插件架构前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在寻找一种在 Swift中的插件架构中实现的方法.

用例

一个应用程序,fx. CLI,有一个文件夹,可以在其中放置插件,并在应用程序启动时加载.

要求

>能够定义插件的协议或协议集
必须或可以坚持.
> Pure Swift.
>反思给定插件实现的协议.
>在应用程序启动时动态加载.
>与委托模式沟通.
>插件开发人员应该能够导入协议,实现它们,编译并将二进制文件放在插件文件夹中.

我试过的

我已经使用Processto启动一个可执行文件,我也可以添加参数.
但这并不符合我的要求.

我遇到了这个可以完成的post,但是这需要使用NSBundle和Objective-C,所以这也没有用.

我真的不确定如何解决这个问题.任何帮助或指向正确的方向将不胜感激.

Swift目前没有稳定的ABI,所以你不能依赖原生接口. (预计这将由Swift 4解决.)

我现在可以想到两个选项,但两者都依赖于在主机和插件之间定义某种通信协议.如果不能使用Objective-C,您还必须自己实现自己的要求(功能内省等).

>降低到C ABI.对于您需要的每个函数,使用@convention(c)注释在Swift的被调用端实现它,并在调用者一侧在标题中声明它以进行外部链接.您将无法实现两次函数,因此您应该定义一个基于回调的API,插件将自己注册到该API中.
>定义一个(例如,基于套接字的)通信协议,并编写要在每个插件中导入的Swift源文件.使插件可执行,在主机应用程序启动时启动通信.

我个人更喜欢选项2,因为它不需要与链接器混合等等,并且您可以为插件的使用定义Swift类型和函数.此外,由于插件是分叉子,它可能会崩溃而不会影响主机.

原文链接:https://www.f2er.com/swift/319325.html

猜你在找的Swift相关文章