一个轻量级的 iOS、Mac 和 Watch OS 框架,使网络和解析变得超级简单。使用开源的 JSONHelper 进行功能解析。对于网络,库支持基本的 GET、POST、DELETE HTTP 请求。
Carthage 是一个去中心化的依赖管理器,它构建您的依赖项并提供二进制框架。
您可以使用以下命令使用 Homebrew 安装 Carthage:
$ brew update
$ brew install carthage
运行 carthage update
以构建框架,然后拖动构建的 NetworkKit.framework
进入您的 Xcode 项目下的 Target - General - Embedded binaries。
NetworkKitExample 项目提供了入门指南。
为了本例的目的,假设我们想下载 Hacker News 中的一个故事。为此,让我们使用他们的 API 终端 - https://hacker-news.firebaseio.com/v0/item/11245652.json?print=pretty,它提供了以下 JSON 响应
{
"by": "jergason",
"id": 11245652,
"kids": [
11245801,
11245962,
11250239,
11246046
],
"time": 1457449896,
"title": "CocoaPods downloads max out five GitHub server CPUs",
"type": "story"
}
我们希望将上述 JSON 响应反序列化为 Swift 对象。为此,我们需要一个符合协议 Deserializable 的 struct,并实现 required init(data: [String: AnyObject]) 构造函数,并使用反序列化操作符(<--
)
import NetworkKit
struct NKItem: Deserializable {
var id: Int?
var username: String?
var kids: [Int]?
var title: String?
var type: String?
var date: NSDate?
init(data: [String : AnyObject]) {
id <-- data["id"]
username <-- data["by"]
kids <-- data["kids"]
title <-- data["title"]
type <-- data["type"]
date <-- data["time"]
}
}
连接到 API 并执行 GET 请求简单直观,解析就像 魔法 一样
NKHTTPRequest.GET(
"https://hacker-news.firebaseio.com/v0/item/11245652.json",
params: ["print": "pretty"],
success: { data in
var item: NKItem?
item <-- data
},
failure: { error in
print(error.message)
})
一个简单的 HTTP GET 方法,用于从 URL 获取请求。
urlString - String
表示 URL 的字符串。
auth (可选) - NKOauth?
当 API 需要时,添加 Oauth 2.0。只需指定 consumerKey 和 consumer Secret,如 NKOauth(consumerKey: “”,consumerSecret: “”)。
params (可选参数) - [NSObject: AnyObject]?
需要通过GET方法传递的参数。‘?’后面的所有内容。
success - ((AnyObject) -> Void)
请求成功时的成功闭包。
failure - ((NKHTTPRequestError) -> Void)
如果在请求过程中发生任何错误,将会通知失败闭包。
一个简单的HTTP POST方法,用于将资源发布到指定的url。
urlString - String
表示 URL 的字符串。
auth (可选) - NKOauth?
当 API 需要时,添加 Oauth 2.0。只需指定 consumerKey 和 consumer Secret,如 NKOauth(consumerKey: “”,consumerSecret: “”)。
params (可选参数) - [NSObject: AnyObject]?
需要通过POST方法传递的body。需要传递的资源。
success - ((AnyObject) -> Void)
请求成功时的成功闭包。
failure - ((NKHTTPRequestError) -> Void)
在请求过程中发生任何错误时,将会通知失败闭包。
一个简单的HTTP DELETE方法,用于从服务器删除资源。
urlString - String
表示 URL 的字符串。
auth (可选) - NKOauth?
当 API 需要时,添加 Oauth 2.0。只需指定 consumerKey 和 consumer Secret,如 NKOauth(consumerKey: “”,consumerSecret: “”)。
params (可选参数) - [NSObject: AnyObject]?
需要通过DELETE方法传递的body。想要删除的资源。
success - ((AnyObject) -> Void)
请求成功时的成功闭包。
failure - ((NKHTTPRequestError) -> Void)
在请求过程中发生任何错误时,将会通知失败闭包。
框架中实现了错误和互联网可用性检查,但如果需要,您可以简单地取消任何任务。
let dataTask = NKHTTPRequest.GET(
"https://hacker-news.firebaseio.com/v0/item/11245652.json",
params: ["print": "pretty"],
success: { data in
},
failure: { error in
print(error.message)
})
dataTask?.cancel()
如您所见,上述示例展示了简单解析的使用方法。此外还有更多高级功能可以使用。
struct NKItem: Deserializable {
var id = 0
var username = ""
init(data: [String : AnyObject]) {
id <-- data["id"]
username <-- data["by"]
}
}
let profileImage: NSURL?
profileImage <-- "https://example.com/images/profile_normal.png"
let date: NSDate?
date <-- 1414172803 // timestamp to NSDate deserialization
让我们考虑一个Twitter API响应的截断版本
{
"text":"Aggressive Ponytail #freebandnames",
"retweet_count": 2,
"user":{
"name":"Sean Cummings",
"location":"LA, CA",
"verified":false,
"screen_name":"sean_cummings"
}
}
其中您可以简单地创建一个包含用户实例的User和Tweet结构
struct NKTwitterUser: Deserializable {
var name = ""
var location = ""
var verified = false
var screenName = ""
init(data: [String : AnyObject]) {
name <-- data["name"]
location <-- data["location"]
verified <-- data["verified"]
screenName <-- data["screen_name"]
}
}
struct NKTweet: Deserializable {
var text = ""
var retweetCount = 0
var user: NKTwitterUser?
init(data: [String : AnyObject]) {
text <-- data["text"]
retweetCount <-- data["retweet_count"]
user <-- data["user"]
}
}
就这么简单。
NetworkKit可在MIT许可下使用。请参阅LICENSE文件以获取更多信息。MIT ⓒ Alex Telek