测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可证 | MIT |
发布最后发布 | 2016年11月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 David Fox 维护。
SwiftBomb 是一个简单的 iOS 库,使用 Swift 编写,用于与 GiantBomb.com API 接口。
巨人炸弹是一个拥有庞大游戏维基的网站。搜索有关游戏,出版商,角色,开发者,流派,甚至是游戏中的对象的信息等。
带有简单的集成过程和 完整文档,SwiftBomb 允许通过一行代码检索资源,并强类型所有响应和错误,以便于您的应用程序中使用。
参见 www.giantbomb.com 了解大量的与视频游戏相关的迷人内容。
SwiftBomb 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile
pod "SwiftBomb"
SwiftBomb 0.7.0 标记了库转换为 Swift 3。如果您的项目尚未准备好迁移到 Swift 3,您可以使用旧版本,通过在 Podfile 中指向版本 0.6.2
。此外,您还可以在线查看 0.6.2 文档。
在访问框架之前,您必须使用您的 API 密钥(从 http://www.giantbomb.com/api 获取一个)和可选的所需的日志级别和用户代理来配置它。通常您在应用程序代理的启动时这样做
import SwiftBomb
let configuration = SwiftBombConfig(apiKey: "YOUR_API_KEY", loggingLevel: .requests, userAgentIdentifier: "Your User Agent", networkingDelegate: networkingDelegate, urlRequestCachePolicy: .useProtocolCachePolicy)
SwiftBomb.configure(configuration)
注意 networkingDelegate
属性。通过分配一个符合 SwiftBombNetworkingDelegate
的类,您可以检查和控制库发出的网络调用。查看 SwiftBombNetworkingDelegate 文档以了解可用内容。
SwiftBomb
类是获取所有资源的入口点。让自动完成向您显示可用内容。例如,要获取数据库中的所有游戏
SwiftBomb.fetchGames { result, error in
if let games = result?.resources {
// games now contains an array of `GameResource`s
for game in games {
print("Game: \(game.name)")
}
}
}
查看其他您可以在 SwiftBomb 文档 中进行的资源请求。
这些方法返回的 result
对象是一个 PaginatedResults
对象。它包含一个强类型的数组 resources
,其中包含调用返回的所有资源,以及关于结果总数和本次请求返回的数量的附加有用信息。您可以使用此信息实现类似示例应用程序中所示的分页。
此外,所有这些请求都可以通过传递 PaginationDefinition
和 SortDefinition
别名来过滤、排序和分页。以下操作与上面完全相同,但它将搜索 未知的 信息,从第 5 个对象开始,限制为 10 个结果,按名称升序排序。
let pagination = PaginationDefinition(offset: 4, limit: 10)
let sorting = SortDefinition(field: "name", direction: .ascending)
SwiftBomb.fetchGames("Uncharted", pagination: pagination, sort: sorting) { result, error in
if let games = result?.resources {
// games now contains an array of `GameResource`s
for game in games {
print("Game: \(game.name)")
}
}
}
SwiftBomb 提供了许多不同的请求和资源类型供您特定搜索,但您想进行 通用 搜索怎么办?尝试 performSearch(_:resourceTypes:pagination:sort:completion:)
。这将返回一个 SearchResults
实例,它提供您所需的所有信息。查看 SearchResults 文档 了解提供的选项。
已从 SwiftBomb 的调用中下载了资源占位符或摘要,但想要扩展信息?SwiftBomb 中许多资源都有一个名为 extendedInfo
的属性。最初它将是 nil,但如果您想查看其中的内容,请在上面调用 fetchExtendedInfo
,原始对象现在将包含更多详细信息。例如
SwiftBomb.fetchGames("Super Mario Galaxy") { result, error in
if let firstGame = result?.resources.first {
firstGame.fetchExtendedInfo { error in
// firstGame's `extendedInfo` property is now available...
for gameCharacter in (firstGame.extendedInfo?.characters)! {
print("Featuring \(gameCharacter.name)")
}
}
}
}
查看关于 Resource
对象的文档,了解每种类型的具体可用信息。
所有 SwiftBomb 的请求都可以传递一个可选的 fields
数组。这样可以指定您需要的响应中的字段。这可以在服务器端加速检索速度。请参阅 Giant Bomb 文档 了解可用的字段名称列表。或者,如果不指定一个或传递 nil,可以检索所有内容。例如,以下请求搜索 喷射特工,只返回 name
、deck
和 image
字段。
SwiftBomb.fetchGames("Splatoon", fields: ["name", "deck", "image"]) { (results, error) in
...
}
与 SwiftBomb 的所有交互都可以返回一个 SwiftBombRequestError
枚举。请查看 它的引用 了解可能的错误。此外,一些还可以返回表示错误的详细信息的 NSError
对象。例如
SwiftBomb.fetchGames("Metal Gear Solid") { result, error in
if let error = error {
switch error {
case .frameworkConfigError:
print("Framework config error")
case .networkError(let nsError):
print("Network error: \(nsError?.localizedDescription)")
case .responseSerializationError(let nsError):
print("Response error: \(nsError?.localizedDescription)")
case .requestError(let gbError):
// This error is of type `ResourceResponseError`
print("Request error: \(gbError)")
}
}
...
}
版本 0.6.0 引入了一个方便的方法来获取网站主页上“即将在 Giant Bomb 发布”面板的内容……
SwiftBomb.fetchComingUpSchedule { comingUpSchedule, error in
guard let comingUpSchedule = comingUpSchedule else {
return
}
if let liveShow = comingUpSchedule.liveNow {
print("Current live show: \(liveShow.title)")
}
for scheduledPost in comingUpSchedule.upcoming {
print("Upcoming post: \(scheduledPost.title)")
}
}
请注意,此方法在 Giant Bomb 上击中了未记录的 URL。如果工作人员更改它,这可能会破坏事物。如果是这样,请告诉我,我将更新。
仍然不好理解?这个存储库提供了一个示例应用程序,展示了所有的检索操作。抱歉它现在有点混乱,但我们可以有一个大致的想法,并且再次,查看类引用。我为库中每个方法编写了相当详尽的文档。
要运行示例项目,首先从版本库中克隆,然后在 Example 目录中运行 pod install
。
David Fox (@davefoxy)
SwiftBomb遵循MIT许可证。更多信息请参阅LICENSE文件。