NetworkKit 1.3.2

NetworkKit 1.3.2

测试已测试
Lang语言 SwiftSwift
许可证 MIT
发布最新发布2016年3月
SPM支持 SPM

Alex Telek 维护。



NetworkKit 许可证 MIT

Available devices

一个轻量级的 iOS、Mac 和 Watch OS 框架,使网络和解析变得超级简单。使用开源的 JSONHelper 进行功能解析。对于网络,库支持基本的 GETPOSTDELETE HTTP 请求。

安装

Chartage

Carthage 是一个去中心化的依赖管理器,它构建您的依赖项并提供二进制框架。

您可以使用以下命令使用 Homebrew 安装 Carthage:

$ brew update
$ brew install carthage

运行 carthage update 以构建框架,然后拖动构建的 NetworkKit.framework 进入您的 Xcode 项目下的 Target - General - Embedded binaries

Import Framework

使用方法

NetworkKitExample 项目提供了入门指南。

为了本例的目的,假设我们想下载 Hacker News 中的一个故事。为此,让我们使用他们的 API 终端 - https://hacker-news.firebaseio.com/v0/item/11245652.json?print=pretty,它提供了以下 JSON 响应

Run in Postman

{
  "by": "jergason",
  "id": 11245652,
  "kids": [
    11245801,
    11245962,
    11250239,
    11246046
  ],
  "time": 1457449896,
  "title": "CocoaPods downloads max out five GitHub server CPUs",
  "type": "story"
}

我们希望将上述 JSON 响应反序列化为 Swift 对象。为此,我们需要一个符合协议 Deserializablestruct,并实现 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)
  })

API

网络

GET

一个简单的 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)
如果在请求过程中发生任何错误,将会通知失败闭包。

POST

一个简单的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)
在请求过程中发生任何错误时,将会通知失败闭包。

DELETE

一个简单的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)
在请求过程中发生任何错误时,将会通知失败闭包。

取消HTTP请求

框架中实现了错误和互联网可用性检查,但如果需要,您可以简单地取消任何任务。

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

NSURL反序列化

let profileImage: NSURL?
profileImage <-- "https://example.com/images/profile_normal.png"

NSDate反序列化

let date: NSDate?
date <-- 1414172803 // timestamp to NSDate deserialization

嵌套JSON

让我们考虑一个Twitter API响应的截断版本

Run in Postman

{
  "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