【问题标题】:Generate Swift Interface from Objective-C Header from Command Line从命令行从 Objective-C 标头生成 Swift 接口
【发布时间】:2016-05-08 09:20:09
【问题描述】:

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

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

奖励任务:应首先预编译标头,因此所有#imports 都应已替换。

【问题讨论】:

标签: swift interop


【解决方案1】:

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

假设您有一个名为header.h 的头文件。将其放入单独的目录中,以便解释器将其识别为模块。还要在同一目录中创建一个模块映射。我们称这个目录为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 参数帮助它找到我们的模块,这很关键;
  • 然后我们用 Tail 剪掉“Welcome to Swift”部分
  • 并将结果写入generated-interface.swift。

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

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


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

swiftc -print-ast file.swift

【讨论】:

  • 您使用哪个 swift 版本?我使用lates stable 3.1,并在两个命令行中得到\n 的错误invalid character in source file
  • 刚刚检查了 3.1 和 4-beta — 都运行良好。确保\n 扩展为换行符;可能是 shell 中单引号/双引号之间的问题。
猜你喜欢
  • 2017-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-13
  • 2014-07-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多