Swift REPL:如何导入、加载、评估或需要 .swift 文件?
Posted
技术标签:
【中文标题】Swift REPL:如何导入、加载、评估或需要 .swift 文件?【英文标题】:Swift REPL: how to import, load, evaluate, or require a .swift file? 【发布时间】:2015-03-08 11:36:52 【问题描述】:在 Swift REPL 中,如何导入(也称为加载、评估、要求)一个典型的文本 *.swift 文件?
我想使用此文件中的代码:~/src/Foo.swift
这样的语法不起作用:import ~/src/Foo.swift
比较:
Swift REPL 中针对框架的等效解决方案是:import Foundation
Ruby REPL 中针对 *.ruby 文件的等效解决方案是:require "~/src/foo"
这些是/不是/我要问的类似问题:
如何使用/制作 Swift 命令行脚本、可执行文件、模块等
如何使用/制作 XCode 游乐场、项目、库、框架等。
如何使用预先存在的文件列表启动 REPL。
【问题讨论】:
【参考方案1】:你需要使用 -I,所以如果你的 modulename.swiftmodule 文件在 ~/mymodules 中而不是使用
启动 swiftswift -I ~/mymodules
然后你就可以导入你的模块了
import module name
应该这么简单
【讨论】:
谢谢,我正在寻找一种在 Swift REPL 中包含 .swift 源代码的方法,并且无需任何特殊启动。为了在 Ruby 中进行比较,我们可以读取源代码并像这样评估它: require '/foo/bar/mycode.rb' 哦,我的错...抱歉...您是否需要动态执行此操作(即加载一个字符串然后“要求”)或者您是否知道“启动时所需的导入文件” “? 动态。就像 Ruby、Python、Perl 等一样,我可以随时要求 REPL 中的任意文件路径。 那么在这个阶段很明显没有。除非文件被编译成一个模块,然后用正确的包含和库路径放置。【参考方案2】:在 swift 中,您不能导入典型的 *.swift 文件。
对于Import Declaration
只能是以下语法:
“ 导入声明 → 属性opt import import-kindopt import-path import-kind → typealias|结构|班级|枚举|协议|变量|功能 导入路径 → 导入路径标识符|进口路径标识符.进口路径 导入路径标识符 → 标识符|运营商” 出自:Apple Inc. “The Swift Programming Language (Swift 2)”。 iBooks。
可以描述为以下格式:
导入
module
导入import kind
module
.symbol name
导入module
.submodule
import head.swift
与import import-kind module.symbol-name
不兼容
一般把你要导入的文件编译成框架,然后就可以看成是一个模块。使用-F framework_directory/
指定第三方框架的搜索路径。
创建一个文件。例如:
// test.swift
import headtest
print("Hello World")
打开你的终端
转到您创建文件的目录。执行命令行
swift -F headtest test.swift
完成了。
【讨论】:
这很有帮助,谢谢。我会尝试你的方法,直到我的问题得到肯定的答案。非常感谢。 你能写一个函数来获取路径,编译它,然后动态导入它吗?然后在启动 repl 时始终包含该函数?【参考方案3】:只需在脚本顶部插入 shebang 行:
#!/usr/bin/env xcrun swift
【讨论】:
感谢您的回答。我正在寻找一种将文件代码加载到 REPL 中的方法;我不是在寻找使文件的代码可执行的方法。我会澄清我的问题。 -乔尔 虽然矫枉过正,但您可以构建一个动态库并将其加载到 REPL 中。 谢谢瓦萨尔。是的,这是一个好主意,如果这里没有人能想出一个将纯文本加载到 REPL 中的解决方案,我的后备方案。我会进一步澄清我的问题。再次感谢! 我正在调查此事。但是,如果可以选择,请考虑构建一个合适的框架(使用 Xcode),然后将其加载到 REPL 中。 对于这个特定问题的答案可能没有帮助,但这很容易知道。在某些情况下,能够以这种方式从脚本中调用各种本机代码,这是一个非常好的选择。【参考方案4】:您可以将源代码复制/粘贴到 repl 中并执行它。 显然不理想,但有时很有用。
【讨论】:
【参考方案5】:似乎无法使用您提供的规范导入文件并让 Xcode 使用 REPL。我认为您仍然可以创建一个合适的框架,但它不是完全您正在寻找的。p>
【讨论】:
谢谢,我正在使用我在问题中提供的规范寻找答案。以上是关于Swift REPL:如何导入、加载、评估或需要 .swift 文件?的主要内容,如果未能解决你的问题,请参考以下文章
如何从 Python 代码进入 REPL(读取、评估、打印、循环)
在 Clojure 中使用 repl 而不是 println