NetworkKit 是一个 swift 库,它隐藏了执行网络请求的一些复杂性。
将此工具包导入到您的 swift 文件中
import NKNetworkKit
简单请求
let request = NKRequest(host: "http://ip.jsontest.com")
NKProcessor.process(request)
NKProcessor 将请求添加到操作队列并以异步方式处理。
要处理响应,请添加以下闭包
NKProcessor.process(request,
success: {response in
let result = response.parsedJsonObject() as! NSDictionary
NSLog("response: \(result)")
},
failure: nil,
finish: nil)
发送一些 json 数据
let data = NSJSONSerialization.dataWithJSONObject(["text":"example_text"],
options:NSJSONWritingOptions(0),
error:nil)
let postRequest = NKRequest(host: "http://httpbin.org", path: "post", postJsonData: data!)
NSLog("Sending %@", postRequest.description)
NKProcessor.process(postRequest,
success: {response in
let result = response.parsedJsonObject() as! NSDictionary
NSLog("Result of simple JSON post as dictionary: \(result)")
},
failure: nil, finish: nil)
或者,下载一个文件
let url = NSURL(string: "http://www.virtualmechanics.com/support/tutorials-spinner/Simple.pdf")
let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as! String
let downloadPath = documentsPath.stringByAppendingPathComponent("simple.pdf")
NKProcessor.startOrResumeDownloadTaskWithURL(url!, downloadPath: downloadPath, delegateQueue: nil)
监视下载完成的事件
let nc = NSNotificationCenter.defaultCenter()
nc.addObserver(self, selector: "downloadTaskDidFinish:", name: NKNotificationDownloadTaskDidFinish, object: nil)
func downloadTaskDidFinish(notification: NSNotification)
{
let fdi = notification.object as! NKFileDownloadInfo
}
在 info 对象中包含完成下载的 url。
在幕后,NKProcessor 维护会话、数据以及所有当前正在下载的任务(文件)的当前状态。如果网络连接离线并再次上线,处理器将自动继续下载文件。
在任何时候,您都可以检查下载文件的进度比率和任务状态。
let fdi = NKProcessorInfo.shared.infoForUrl(url)
请注意,当您愿意下载太多的文件时,您可以使用自己的 NSOperationQueue。您的队列定义了最大并发下载的规则。
还有一件事,将下载进度比率与您的自定义类连接(例如,从 UIProgressView 派生 MyProgressView)
if let dfi = NKProcessorInfo.shared.infoForUrl(url!)
{
dfi.addObserver(myProgressView, forKeyPath: "downloadRatio", options: NSKeyValueObservingOptions.allZeros, context: nil)
}
class MyProgressView: UIProgressView
{
override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>)
{
let fdi = object as! NKFileDownloadInfo
dispatch_async(dispatch_get_main_queue()) {
self.setProgress(fdi.downloadRatio, animated: false)
}
}
}
Swift,最低 iOS 8.0
NKNetworkKit 通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile 中
pod "NKNetworkKit"
Krešimir Prcela,[email protected]
NKNetworkKit 可在 MIT 许可下使用。有关更多信息,请参阅 LICENSE 文件。