Как включить .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, так как выделение занимает время.