从命令行的Objective-C标头生成Swift接口

fab*_*abb 18 interop swift

在Xcode中,对于任何Objective-C头文件,我们都可以查看Generated Interface,它显示了Swift在interop中的看法.

我想从命令行生成它.知道怎么做吗?

奖励任务:标题应该首先进行预编译,因此所有#imports都应该被替换.

小智 5

:type lookup在您要检查的模块上调用解释器命令。

假设您有一个名为的头文件header.h。将其放在单独的目录中,以便解释器将其识别为模块。还要在同一目录中创建一个模块映射。我们称这个目录为Mod

./
./Mod/
     /header.h
     /module.modulemap
Run Code Online (Sandbox Code Playgroud)

填写以下内容:

module Mod {
  header "./header.h"
  export *
}
Run Code Online (Sandbox Code Playgroud)

完成后,发出如下命令:

echo "import Mod\n:type lookup Mod" | swift -I./Mod | tail -n+2 >| generated-interface.swift
Run Code Online (Sandbox Code Playgroud)

另外,您可能希望使用类似以下命令:

echo "import Mod\n:print_module Mod" | swift -deprecated-integrated-repl -I./Mod >| generated-interface.swift
Run Code Online (Sandbox Code Playgroud)

细分如下:

  • 首先,我们回显要执行的脚本:导入模块并对其进行查找。
  • 然后我们启动解释器并将脚本输入其中;该-I论点有助于找到我们的模块,这一点至关重要。
  • 然后我们用尾巴剪掉“欢迎使用Swift”部分
  • 并将结果写入generated-interface.swift

运行上述命令时,请确保将工作目录设置为比Mod目录高一级。

请注意,输出可能与Xcode的输出不完全相同,但是非常相似。


仅作记录,如果您想从Swift文件中生成接口,就这样:

swiftc -print-ast file.swift
Run Code Online (Sandbox Code Playgroud)