您的位置:首页 > 理论基础 > 计算机网络

Just网络传输器和JSONExport的使用

2016-05-17 22:40 483 查看
首先使用cocoapod来配置Just 首先创建一个空的文件Podfile

在Podflie中添加一句话

use_frameworks!
pod 'Just'

用open with External Editor用终端来打开 转换到根目录下 用cd..再ls退到根目录,随后再输入命令来安装Just

jsonExport明天再介绍
使用jsonExport 可以直接使用其固定的类

把从网络上获取到的json字符串拿过来 随后可以生成你想要得类 例如swift的class或者swift类型的结构体等,这个就要看个人的需求了,随后勾掉帮助方法,随后即可生成所需的文件,将生成的文件拷贝进项目中的model小组即可
随后编netWorker类,可以用来统一网络请求
大致的网络请求的步骤是这样的

随后通过枚举,来加载不同的请求的网址和参数

enum NetWorkHelper{
case courseID(authtoken:String,url:String)
随后定义通用的请求网址和通用的请求参数

随后进行网络请求 在这个例子汇总item是在网络请求后的一个数组,所以用它来进行保存 在后来的判断过程中,要判断是否是个json的字符串,或者retcode是否为0 为0才成功等,恐怕自己太渣,用了最傻的if else语句来进行判断 大神是用guard的语句,因此,稍后奉上 用闭包进行最后的完成 swift的guard语句,主要是为了请求当if不成立的时候来判断比较好的博客有http://www.jianshu.com/p/3a8e45af7fdd
import Just
enum NetWorkHelper{ case courseID(authtoken:String,url:String)
//参数
static var params = [String:AnyObject]()

//完成的闭包 返回items
func getItems(completion:([Item]?,String?) -> Void){
var error:String?
//保存result的
var result:[Item]?
switch self {

case .courseID(authtoken: let auth,let url):
//配置参数

NetWorkHelper.params["authtoken"] = auth
print(NetWorkHelper.params)
print(url)
Just.get(url, params: NetWorkHelper.params,asyncCompletionHandler: { (r) in

if r.ok{
print(222)
//保证json是个字符串
if let jsonDic = r.json as? NSDictionary{
let retcode = jsonDic["retcode"] as! NSNumber
if(retcode != 0){
error = "授权错误"
}else{
let rootC = RootClass(fromDictionary: jsonDic)

result = rootC.items
}
}else{
error = "不是json字符串"
}
}else{
error = "服务器错误"
}
//确保字典中的retcode为0

completion(result,error)
})
}
}
}


用guard语句 发现一只不能拿到错误的提示 有可能是return 的关系

import Just

enum NetworkHelper {

case WeeklyWeather(cityid: String)

//http://api.k780.com:88/?app=weather.future&weaid=1&&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json

private static var params = [
"app":"weather.future",
// "appkey":"12215",
"sign":"24c28ec9c8629ce27cfbec8af12cf353",
"format":"json"
]

private static let baseUrl = "http://api.k780.com:88"

func getWeather(completion: ([Result]?, String?) -> Void) {

var error: String?
var results: [Result]?

switch self {
case .WeeklyWeather(cityid: let weaid):

NetworkHelper.params["weaid"] = weaid

Just.get(NetworkHelper.baseUrl, params: NetworkHelper.params,asyncCompletionHandler: { (r) in
if r.ok {
//确保返回结果是一个json,并可转换为一个字典
guard let jsonDict = r.json as? NSDictionary else {
error = "不是一个json字符串"
return
}

//确保字典中的success字段的值是1
guard let success = jsonDict["success"] where success as? String == "1" else {
error = "返回数据格式不对,或者授权错误"
return
}

let weather = Weather(fromDictionary: jsonDict)
results = weather.result

} else {
error = "服务器出错"
}

completion(results, error)

})

}
}

}
这样可以很好的将网络请求与viewController分离开来

viewController中只要一段就够了

import UIKit

class ViewController: UIViewController {
var results1 = [Item]()

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
let course = NetWorkHelper.courseID(authtoken: "876E65B5AFB21A0708EC6B04F28ED73D08D1ECC41182DBC0",url:"http://dodo.hznu.edu.cn/api/coursequery")
//  print(course)
course.getItems {(results,error) in
if let results2 = results{
self.results1 = results2
dispatch_async(dispatch_get_main_queue(), {
print(self.results1[0].id)

})
//print(self.results1)
}else{
print(error)
}
}
}


这样就能进行有序的网络请求了,比Alamofire更方便

Just的参考文档
http://docs.justhttp.net/QuickStart.html
JSONExport的参考
https://github.com/yagamis/JSONExport
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: