Swift - Objective-C 桥接

Swift5 macOS

此博文的一部分:@dynamicCallable 第 2 部分:Swift/ObjC 桥接

去年 12 月,我们演示了如何使用 Swift 5 的新 Dynamic Callable 功能来将 Unix 命令作为 Swift 函数运行,比如 shell.ls()。 今天,我们将使用相同的功能来实现我们自己的 Swift / Objective-C 桥接!

当然,Swift 已经在 Apple 平台上集成了 Objective-C,由编译器直接支持,以及相关的桥接运行时。
然而,使用Dynamic Callable,实际上可以在库级别构建类似的东西,我们想向您展示它会是什么样子。

Swift 也可以在 Linux 上运行,但它没有 Objective-C 运行时和桥接功能。使用此处展示的方法,借助 libFoundationGNUstep,您也可以在 Linux 上组合 Swift 和 Objective-C。

这就是我们想要达到的效果

let ma = ObjC.NSMutableArray()
ma.addObject("Hello")
  .addObject("World")
print("Array:", ma.description())

仅用于演示目的:这只是一个演示,展示了您可以使用@dynamicCallable 做什么,仅此而已!(我们还作弊了几次,默默地依赖于内置的桥接。

安装 Swift 5 快照

要使此功能生效,您需要安装 Swift 5。 截至今天,Swift 5 尚未发布,但 Apple 在以下位置提供了预构建的 Swift 5 开发工具链:swift.org,您也可以使用 Xcode 10.2beta。 只需安装工具链,然后在 Xcode 的“工具链”菜单中选择它。

如果您在命令行中操作,请确保调用 export TOOLCHAINS=swift 以访问所选版本。

要尝试下面的示例,您可以打开 Swift 5 Playground 或在 Xcode 中创建一个命令行工具项目。

链接

作者

ZeeZide 提供。我们喜欢反馈、GitHub 星星、酷的合同工作,大概任何您能想到的赞美形式。