Ответ 1
Вызвать команду интерпретатора :type lookup
в модуль, который вы пытаетесь проверить.
Предположим, что у вас есть файл заголовка с именем header.h
. Поместите его в отдельный каталог, чтобы интерпретатор распознал его как модуль. Также создайте модуль в том же каталоге. Позвоните в этот каталог Mod
:
./
./Mod/
/header.h
/module.modulemap
Заполните модуль map следующим образом:
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
Он разбивается следующим образом:
- сначала мы эхо файл script, который должен быть выполнен: import module и type-lookup it;
- тогда мы запускаем интерпретатор и загружаем script в него; аргумент
-I
помогает найти наш модуль, что имеет решающее значение; - то мы отключили часть "Добро пожаловать в Swift" с Tail
- и записать результат в
generated-interface.swift
.
Во время выполнения указанных выше команд убедитесь, что ваш рабочий каталог установлен на один уровень выше, чем каталог Mod
.
Обратите внимание, что вывод может быть не таким же, как у Xcode, но он очень похож.
Только для записи, если вы хотите создать интерфейс из файла Swift, тогда это просто:
swiftc -print-ast file.swift