【问题标题】:Swift REPL: how to import, load, evaluate, or require a .swift file?Swift REPL:如何导入、加载、评估或需要 .swift 文件?
【发布时间】: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。

【问题讨论】:

    标签: swift import require read-eval-print-loop


    【解决方案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/ 指定第三方框架的搜索路径。

    1. 创建一个文件。例如:

      // test.swift import headtest print("Hello World")

    2. 打开你的终端

    3. 转到您创建文件的目录。
    4. 执行命令行

      swift -F headtest test.swift

    完成了。

    【讨论】:

    • 这很有帮助,谢谢。我会尝试你的方法,直到我的问题得到肯定的答案。非常感谢。
    • 你能写一个函数来获取路径,编译它,然后动态导入它吗?然后在启动 repl 时始终包含该函数?
    【解决方案3】:

    只需在脚本顶部插入 shebang 行:

    #!/usr/bin/env xcrun swift
    

    【讨论】:

    • 感谢您的回答。我正在寻找一种将文件代码加载到 REPL 中的方法;我不是在寻找使文件的代码可执行的方法。我会澄清我的问题。 -乔尔
    • 虽然矫枉过正,但您可以构建一个动态库并将其加载到 REPL 中。
    • 谢谢瓦萨尔。是的,这是一个好主意,如果这里没有人能想出一个将纯文本加载到 REPL 中的解决方案,我的后备方案。我会进一步澄清我的问题。再次感谢!
    • 我正在调查此事。但是,如果可以选择,请考虑构建一个合适的框架(使用 Xcode),然后将其加载到 REPL 中。
    • 对于这个特定问题的答案可能没有帮助,但这很容易知道。在某些情况下,能够以这种方式从脚本中调用各种本机代码,这是一个非常好的选择。
    【解决方案4】:

    您可以将源代码复制/粘贴到 repl 中并执行它。 显然不理想,但有时很有用。

    【讨论】:

      【解决方案5】:

      似乎无法使用您提供的规范导入文件并让 Xcode 使用 REPL。我认为您仍然可以创建一个合适的框架,但它不是完全您正在寻找的。​​p>

      【讨论】:

      • 谢谢,我正在使用我在问题中提供的规范寻找答案。
      猜你喜欢
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2014-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      相关资源
      最近更新 更多