在Xcode中,对于任何Objective-C标头,我们都可以查看Generated Interface,它显示了Swift在互操作中如何看到它。
我想从命令行生成它。知道怎么做吗?
奖金任务:首先应预先编译标题,因此所有#import
都应该已被替换。
答案 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
分解如下:
-I
参数帮助它找到我们的模块,这是至关重要的; generated-interface.swift
。运行上述命令时,请确保将工作目录设置为比Mod
目录高一级。
请注意,输出可能与Xcode完全不同,但它非常相似。
只是为了记录,如果你想从Swift文件生成界面,那么就是这样:
swiftc -print-ast file.swift