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 中而不是使用

启动 swift
swift -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 kindmodule.symbol name 导入module.submodule

import head.swiftimport 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(读取、评估、打印、循环)

在 Chez Scheme 中重新导入库

在 Clojure 中使用 repl 而不是 println

Xcode:如何退出 lldb swift repl

Swift - 我如何等待 dispatch_async 完成?

如何有效且快速地将大型 (6 Gb) .csv 文件导入 R,而不会导致 R REPL 崩溃?