Как включить .swift файл из другого .swift файла в немедленном режиме?
Наличие файла с определением функции bar.swift
:
func bar() {
println("bar")
}
И script будет запущен в непосредственном режиме foo.swift
:
#!/usr/bin/xcrun swift -i
bar()
Как импортировать bar.swift
bar()
функцию из foo.swift
?
Ответы
Ответ 1
Я думаю, что ответ прямо сейчас заключается в том, что вы не можете разделить код на несколько файлов, если вы не компилируете код. Выполнение с помощью #!/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
Если все ваши быстрые файлы находятся в одном каталоге, вы можете сократить команду компиляции:
$ swiftc *.swift -o foobar
Или если вы хотите искать дочерние каталоги:
$ find . -iname '*.swift' | xargs swiftc -o foobar
Ответ 2
Напишите bash script, чтобы объединить файлы. Под script ниже перед файлом библиотеки перед файлом script находится файл:
#!/bin/bash
cat $HOME/my_swift/my_library_to_add.swift $1.swift > t.swift
swift t.swift
Поскольку приведенный файл является единственным, вы можете поместить его на RAM-диск. Вот более продвинутая версия, которая создает или повторно использует крошечный 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
Это создает крошечный RAM-диск емкостью 1 Мб, достаточно большой для любой утилиты script и простой библиотеки.
Установленный RAM-диск будет виден в Finder, откуда он может быть удален. Я не размещаю его непосредственно в script, так как выделение занимает время.