如何将库导入 CLI 中使用的 swift 代码?



我想做什么

我想尝试通过 CLI 上的 swift 库通过 API 获取儿子文件。 我正在使用库 Alamofire,但我不明白如何导入 swift 库。

也许在导入之前需要一些任务(构建? 链接?)但我找不到如何记录... 你能教我怎么做吗?

问题

$ swift getAPI.swift
getAPI.swift:1:8: error: no such module 'Alamofire'
import Alamofire
^

源代码

import Alamofire
func getArticles(){
Alamofire.request(.GET, "https://qiita.com/api/v2/items")
.responseJSON { response in
print(response.result.value )
}
}
getArticles()

这应该有助于运行一次性脚本和使用 Swift REPL。但是,为了为命令行构建简单的工具,我建议使用 Swift 包管理器,因为它会为您处理链接和依赖关系管理。


要将脚本代码链接到 Alamofire 库,swift 编译器必须知道库的位置。默认情况下,它会搜索/Library/Frameworks,但我们可以提供选项来告诉它在哪里查找。检查swift --help,我们看到以下选项(以及许多其他选项)。

USAGE: swift [options] <inputs>
OPTIONS:
-F <value>    Add directory to framework search path
-I <value>    Add directory to the import search path
-L <value>    Add directory to library link search path

您提供的目录必须包含要导入的库的已编译二进制文件。

  • 若要导入.swiftmodule二进制文件,请使用-I
  • 若要导入.framework二进制文件,请使用-F
  • 要链接到像libsqlite3.0.dylib这样的库,请使用-L

我认为 Carthage 和 CocoaPods 将构建框架,而 Swift Package Manager 将构建.swiftmodules。这三者都应该将二进制文件放在非常可预测的位置。不同类型的二进制文件可能都在同一种情况下,这没关系。

综上所述,如果使用 SPM 进行构建,则调用可能如下所示:

$ swift -I .build/debug/

但是,如果您使用迦太基管理依赖项,它可能看起来像这样:

$ swift -F ./Carthage/Build/iOS

为了进一步阅读,我发现这些资源很有用:

  • krakendev.io/blog/scripting-in-swift
  • realm.io/news/swift-scripting/

更新:Swift 包管理器现在也可以为您处理这个问题!如果您将脚本编写为包并包含一堆依赖项,例如 Alamofire,您现在可以在 REPL 中测试它们。只需cd到您的软件包目录中并使用swift run --repl启动它。有关更多详细信息,请参阅 swift.org 博客。

最新更新