有一个带有函数定义的文件bar.swift
:
func bar() {
println("bar")
}
以及一个以立即模式运行的脚本foo.swift
:
#!/usr/bin/xcrun swift -i
bar()
你如何从导入bar.swift
的bar()
功能foo.swift
?
有一个带有函数定义的文件bar.swift
:
func bar() {
println("bar")
}
以及一个以立即模式运行的脚本foo.swift
:
#!/usr/bin/xcrun swift -i
bar()
你如何从导入bar.swift
的bar()
功能foo.swift
?
我认为现在的答案是,除非您编译代码,否则您不能将代码拆分到多个文件中。执行 with#!/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 文件都在同一个目录中,你可以缩短编译命令:
$ 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 Mb RAM 驱动器的更高级版本。
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 Mb 的微型 RAM 驱动器,足以容纳任何实用程序脚本和简单的库。
安装的 RAM 驱动器将在 Finder 中可见,可以从中弹出。我不会直接在脚本中处理它,因为分配需要时间。