AlamofireJsonToObjects+EVReflection:一步解決JSON解析

Hydrogen發表於2016-03-23

上一篇文章中我們介紹了使用EVReflection解析JSON的方法,但是還是用到了SwiftyJSON這樣的工具,那麼有木有什麼辦法能夠更簡單的解決這樣的問題EVReflection的作者還為我們提供了AlamofireJsonToObjects這樣一個工具,讓我們能夠更加容易的處理JSON資料

AlamofireJsonToObjects 基於目前使用最廣泛的Swift HTTP庫Alamofire和我們上次提到的
EVReflection

第三方庫匯入

我們通過CocoaPods匯入

use_frameworks!
pod "AlamofireJsonToObjects"

在用到到Swift檔案中import AlamofireJsonToObjects

Demo

作為EVReflection的一個配套工具,它的使用非常簡單,我們通過一個Demo一起來學習一下

構建資料模型

根據我們上次寫出的資料模型,我們寫出整個response的資料模型

import Foundation
import EVReflection
class CityModel:EVObject{
    var city_name = ""
    var city_pinyin = ""
    var short_name = ""
    var short_pinyin = ""
    var city_id = 100010000
}

如下

class CityModelApiResponse:EVObject{
    var cities = [CityModel]()
    var errno = 0;
    var msg = "";
}

發起網路請求

在我們的檔案中import AlamofireJsonToObjects
我們這次先對Alamofire的網路請求做一些封裝,我們這裡使用了泛型以保證通用性
這裡不再responseJSON而是responseObject


class func invokeObject< T: EVObject >(
    url:String,
    parameters:[String: AnyObject]? = nil,
    complete:(object: T?, error: NSError?) -> Void){
    Alamofire.request(.GET, ServiceEndpointBase, parameters: nil, encoding: .URL, headers: ["apikey":"ownAPIKey"]).validate(statusCode: 200..<300).responseObject { (URLRequest:NSURLRequest?, HTTPURLResponse:NSHTTPURLResponse?, result:Result< T, NSError>) in
        complete(object: result.value, error: result.error)
    }
}

接下來我們寫具體的涉及業務的請求方法


class func getCityListObject(complete:(object: CityModelApiResponse?, error: NSError?) -> Void){
    invokeObject(ServiceEndpointBase,parameters: nil,complete: complete)
}

呼叫方法及結果

我們在viewDidLoad方法中呼叫一下我們的網路請求方法


    ServiceProxy.getCityListObject { (object, error) in
        print(object!)
    }

控制檯結果如下

CityModelApiResponse {
   hash = 5326178534503437261
   key = cities, value = (
        {
        "city_id" = 100010000;
        "city_name" = "U5317U4eacU5e02";
        "city_pinyin" = beijing;
        "short_name" = "U5317U4eac";
        "short_pinyin" = bj;
    },
        {
        "city_id" = 500010000;
        "city_name" = "U5929U6d25U5e02";
        "city_pinyin" = tianjin;
        "short_name" = "U5929U6d25";
        "short_pinyin" = tj;
    },
        {
        "city_id" = 1800010000;
        "city_name" = "U77f3U5bb6U5e84U5e02";
        "city_pinyin" = shijiazhuang;
        "short_name" = "U77f3U5bb6U5e84";
        "short_pinyin" = sjz;
    },
        {
        "city_id" = 1800020000;
        "city_name" = "U5510U5c71U5e02";
        "city_pinyin" = tangshan;
        "short_name" = "U5510U5c71";
        "short_pinyin" = ts;
    }
    ...
)
   key = errno, value = 0
   key = msg, value = success
}

AlamofireJsonToObjects不僅提供了responseObject還有responseArray,可以直接匯出陣列

相關文章