SwiftBomb 0.7.1

SwiftBomb 0.7.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后发布2016年11月
SwiftSwift 版本3.0
SPM支持 SPM

David Fox 维护。



SwiftBomb 0.7.1

SwiftBomb

SwiftBomb 是一个简单的 iOS 库,使用 Swift 编写,用于与 GiantBomb.com API 接口。

巨人炸弹是一个拥有庞大游戏维基的网站。搜索有关游戏,出版商,角色,开发者,流派,甚至是游戏中的对象的信息等。

带有简单的集成过程和 完整文档,SwiftBomb 允许通过一行代码检索资源,并强类型所有响应和错误,以便于您的应用程序中使用。

参见 www.giantbomb.com 了解大量的与视频游戏相关的迷人内容。

安装

SwiftBomb 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile

pod "SwiftBomb"

关于 Swift 3 的注意事项

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,其中包含调用返回的所有资源,以及关于结果总数和本次请求返回的数量的附加有用信息。您可以使用此信息实现类似示例应用程序中所示的分页。

过滤、分页和排序

此外,所有这些请求都可以通过传递 PaginationDefinitionSortDefinition 别名来过滤、排序和分页。以下操作与上面完全相同,但它将搜索 未知的 信息,从第 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,可以检索所有内容。例如,以下请求搜索 喷射特工,只返回 namedeckimage 字段。

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)")
        }
    }

...
}

即将发布的 Giant Bomb 文章

版本 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)

致谢

  • 示例项目使用了ImageLoaderSwift,它集成起来非常方便且轻量。
  • 巨型炸弹维基百科上的所有开发者和贡献者。那里有大量信息!

许可证

SwiftBomb遵循MIT许可证。更多信息请参阅LICENSE文件。