Just网络传输器和JSONExport的使用

首先使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值