测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布日期最后发布 | 2017 年 9 月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 Anthony Nowell 维护。
Algorithmia API 的 Swift/iOS 客户端库
注意:此客户端是用 Swift 3.0(Xcode 8,iOS 10)编写的
有关 API 文档,请参阅 SwiftDocs
您可以克隆存储库并将文件从 Algorithmia 中拖拽并复制
使用您的API密钥实例化客户端
let client = Algorithmia.client(simpleKey: apiKey)
注意
以下调用算法的示例按输入/输出类型组织,不同算法之间有所不同。
注意:单个算法可能有不同类型的输入和输出,或者接受多种类型的输入,因此请参阅该算法的描述以获取特定于该算法的用法示例。
通过将一个字符串传递给它的 pipe
方法来调用具有文本输入的算法。如果算法输出为文本,则调用 getText
方法以将结果作为字符串获取。
let foo = client.algo(algoUri: "algo://demo/Hello/0.1.1")
foo.pipe(text: "foo") { resp, error in
if (error == nil) {
let data = resp.getText()
let metadata = resp.getMetadata()
} else {
print(error)
}
}
通过将可以序列化为JSON的类型(最著名的为 python 字典和数组)传递给算法来调用它。对于返回JSON的算法,调用响应的 getJson
方法以获取适当的反序列化类型。
let foo = client.algo(algoUri: "algo://WebPredict/ListAnagrams/0.1.0")
foo.pipe(json: jsonData) { resp, error in
if (error == nil) {
let data = resp.getJSON()
let metadata = resp.getMetadata()
} else {
print(error)
}
}
如果您已有序列化的JSON,可以这样调用:
let foo = client.algo("")
let jsonWords = "[\"transformer\", \"terraforms\", \"retransform\"]"
foo.pipe(rawJson: jsonWords) { resp, error in
}
通过传递一个 Data 对象到 pipe
方法来调用具有二进制输入的算法。类似地,如果算法的响应是二进制数据,那么 getData
方法的调用结果将成为字节数组的数据对象。
let foo = client.algo(algoUri: "algo://WebPredict/ListAnagrams/0.1.0")
foo.pipe(data: data) { resp, error in
if (error == nil) {
let data = resp.getData()
let metadata = resp.getMetadata()
} else {
print(error)
}
}
API 错误和 Algorithm 异常将在回调到 pipe
方法时返回 AlgoError
let foo = client.algo(algoUri: "algo://util/whoopsWrongAlgo")
foo.pipe(text: "foo") { resp, error in
if let error = error as? AlgoError {
switch error {
case .ProcessError:
print("Algorithmia Error:",error)
break;
case .DataError:
print("Data Error:",error)
break;
default:
break;
}
}
}
// Algorithmia Error: algorithm algo://util/whoopsWrongAlgo not found
Algorithmia Java 客户端还提供了管理 Algorithmia 托管数据和您已连接到 Algorithmia 账户的 Dropbox 或 S3 账户数据的途径。
该客户端提供了一种 AlgoDataFile
类型(通常通过 client.file(uri)
创建)以及一种 AlgoDataDirectory
类型(通常通过 client.dir(uri)
创建),它们提供了管理您数据的方法。
通过实例化一个 AlgoDataDirectory
对象并调用 create()
来创建目录。
let robots = client.dir("data://.my/robots")
robots.create { error in
...
}
let dbxRobots = client.dir("dropbox://robots")
dbxRobots.create { error in
...
}
通过在 AlgoDataFile
对象上调用 put
或在 AlgoDataDirectory
对象上调用 putFile
来上传文件。
let robots = client.dir("data://.my/robots")
// Upload local file
robots.putFile(file:fileURL) { file, error in
...
}
// Write a text file
robots.file("Optimus_Prime.txt").put(string:"Leader of the Autobots") { error in
...
}
通过在 DataFile 对象上调用 getString
、getData
或 getFile
来下载文件。
let robots = client.dir("data://.my/robots")
// Download file and get the file handle
robots.file("T-800.png").getFile { url, error in
...
}
// Get the file's contents as a string
robots.file("T-800.txt").getString { text, error in
...
}
// Get the file's contents as a byte array
robots.file("T-800.dat").getData(completion: { (text, error) in
...
})
通过分别在 AlgoDataFile
或 AlgoDataDirectory
对象上调用 delete
来删除文件和目录。《AlgoDataDirectory》有一个可选的 force
参数,表示是否应在目录包含文件或其他目录时删除。
client.file("data://.my/robots/C-3PO.txt").delete() { error in
...
}
client.dir("data://.my/robots").delete(force: false) { result, error in
...
}
使用在 DataDirectory
对象上调用 files
或 dirs
返回的迭代器遍历目录内容。
// List top level directories
let myRoot = client.dir("data://.my")
myRoot.forEach(file: { file in
...
}, completion: { error in
...
})
// List files in the 'robots' directory
myRoot.forEach(dir: { file in
...
}, completion: { error in
...
})
在创建目录时设置目录权限,或在已存在的目录上更新权限。
let fooLimited = client.dir("data://.my/fooLimited")
// Create the directory as private
fooLimited.create(readACL:.PRIVATE) { error in
...
}
// Update a directory to be public
fooLimited.update(readACL:.PUBLIC) { error in
...
}