Как включить файл.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, откуда его можно извлечь. Я не располагаю это непосредственно в сценарии, так как выделение занимает много времени.

Другие вопросы по тегам