Как включить файл.swift из другого файла.swift в немедленный режим?
Наличие файла с определением функции bar.swift
:
func bar() {
println("bar")
}
И скрипт для запуска в немедленном режиме foo.swift
:
#!/usr/bin/xcrun swift -i
bar()
Как вы импортируете bar.swift
"s bar()
функция от foo.swift
?
2 ответа
Я думаю, что ответом сейчас является то, что вы не можете разделить код на несколько файлов, если не скомпилируете код. Выполнение с #!/usr/bin/swift
возможно только для отдельных файловых скриптов.
Очевидно, что это хорошая идея, чтобы подать запрос на улучшение на http://bugreport.apple.com/, но в то же время вам придется скомпилировать код перед его выполнением.
Кроме того, ваш foo.swift
файл не может иметь это имя, вы должны переименовать его в main.swift
, Если выполняется несколько файлов, то только main.swift
разрешено иметь код на верхнем уровне.
Итак, у вас есть эти два файла:
main.swift:
bar()
bar.swift:
func bar() {
println("bar")
}
И скомпилируйте / выполните код с:
$ swiftc main.swift bar.swift -o foobar
$ ./foobar
bar
Если все ваши файлы swift находятся в одном каталоге, вы можете сократить команду compile:
$ swiftc *.swift -o foobar
Или, если вы хотите искать дочерние каталоги:
$ find . -iname '*.swift' | xargs swiftc -o foobar
Напишите bash-скрипт для объединения файлов. Сценарий, приведенный ниже, ожидает выполнения файла библиотеки перед вашим скриптом:
#!/bin/bash
cat $HOME/my_swift/my_library_to_add.swift $1.swift > t.swift
swift t.swift
Поскольку полученный файл является одноразовым, вы можете разместить его на диске RAM. Вот более продвинутая версия, которая создает или повторно использует крошечный 1 МБ ОЗУ по мере необходимости.
if [ ! -d /Volumes/swift_buffer ]; then
diskutil erasevolume HFS+ 'swift_buffer' `hdiutil attach -nomount ram://2048`
fi
cat $HOME/my_swift/my_library_to_add.swift $1.swift > /Volumes/swift_buffer/t.swift
swift /Volumes/swift_buffer/t.swift
Это создает крошечный ОЗУ емкостью всего 1 МБ, достаточно большой для любого служебного скрипта и простой библиотеки.
Подключенный RAM-диск будет виден в Finder, откуда его можно извлечь. Я не располагаю это непосредственно в сценарии, так как выделение занимает много времени.