此博文的一部分:@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 运行时和桥接功能。使用此处展示的方法,借助 libFoundation 或 GNUstep,您也可以在 Linux 上组合 Swift 和 Objective-C。
这就是我们想要达到的效果
let ma = ObjC.NSMutableArray()
ma.addObject("Hello")
.addObject("World")
print("Array:", ma.description())
仅用于演示目的:这只是一个演示,展示了您可以使用@dynamicCallable 做什么,仅此而已!(我们还作弊了几次,默默地依赖于内置的桥接。)
要使此功能生效,您需要安装 Swift 5。 截至今天,Swift 5 尚未发布,但 Apple 在以下位置提供了预构建的 Swift 5 开发工具链:swift.org,您也可以使用 Xcode 10.2beta。 只需安装工具链,然后在 Xcode 的“工具链”菜单中选择它。
如果您在命令行中操作,请确保调用 export TOOLCHAINS=swift
以访问所选版本。
要尝试下面的示例,您可以打开 Swift 5 Playground 或在 Xcode 中创建一个命令行工具项目。