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

时间:2016-05-08 09:20:10

标签: swift interop

在Xcode中,对于任何Objective-C标头,我们都可以查看Generated Interface,它显示了Swift在互操作中如何看到它。

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

奖金任务:首先应预先编译标题,因此所有#import都应该已被替换。

1 个答案:

答案 0 :(得分:5)

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

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

./
./Mod/
     /header.h
     /module.modulemap

使用以下内容填写模块图:

module Mod {
  header "./header.h"
  export *
}

完成后,发出如下命令:

echo "import Mod\n:type lookup Mod" | swift -I./Mod | tail -n+2 >| generated-interface.swift

或者,您可能希望使用具有相同效果的命令:

echo "import Mod\n:print_module Mod" | swift -deprecated-integrated-repl -I./Mod >| generated-interface.swift

分解如下:

  • 首先我们回显要执行的脚本:import module和type-lookup it;
  • 然后我们启动解释器并将脚本输入其中; -I参数帮助它找到我们的模块,这是至关重要的;
  • 然后我们用Tail
  • 切断了“欢迎来到Swift”部分
  • 并将结果写入generated-interface.swift

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

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

只是为了记录,如果你想从Swift文件生成界面,那么就是这样:

swiftc -print-ast file.swift