美文网首页iOS开发
iOS开发-网络-合理封装请求接口(三)真实案例

iOS开发-网络-合理封装请求接口(三)真实案例

作者: Geniune | 来源:发表于2018-04-19 13:47 被阅读125次

    实际项目开发中会用到的接口多种多样,有一些相对复杂的数据例如:列表、列表嵌套等,这里使用一个真实案例来阐述如何解决

    使用GET请求调用API(https://www.sojson.com/open/api/weather/json.shtml),获取“北京市”未来五天天气预报

    浏览器打开该API,可以看到JSON数据格式,最终显示效果如图所示

    23.png

    先建模:

    @interface WeatherModel : BaseModel
    
    @property (nonatomic, strong) NSString *api;//161
    @property (nonatomic, strong) NSString *date;//19日星期四
    @property (nonatomic, strong) NSString *sunrise;//05:33
    @property (nonatomic, strong) NSString *sunset;//18:56
    @property (nonatomic, strong) NSString *high;//高温 26.0℃
    @property (nonatomic, strong) NSString *low;//低温 13.0℃
    @property (nonatomic, strong) NSString *type;//多云
    @property (nonatomic, strong) NSString *fx;//东南风
    @property (nonatomic, strong) NSString *fl;//4-5级
    @property (nonatomic, strong) NSString *notice;//阴晴之间,谨防紫外线侵扰
    
    @end
    

    外面一层数据在建模时,需要注意一下其中forecast和yesterday字段对应的类型定义,其中yesterday是WeatherModel类型,forecast数组的每项元素也是WeatherModel类型

    @interface CityWeatherModel : BaseModel
    
    @property (nonatomic, strong) NSString *shidu;//73%
    @property (nonatomic, strong) NSString *wendu;//17
    @property (nonatomic, strong) NSString *pm25;//150
    @property (nonatomic, strong) NSString *pm10;//232
    @property (nonatomic, strong) NSString *quality;//中度污染
    @property (nonatomic, strong) WeatherModel *yesterday;//注意类型
    @property (nonatomic, strong) NSArray *forecast;//注意类型
    
    @end
    

    接下来封装业务接口,这里相比第二章中的简单数据解析多了些内容,但是很好理解

    1. 定义keyArray和valueArray数组,用于映射responseObj内部数据关系
    2. 从刚才建模的步骤,得知yesterday对象和forecast数组元素类型均为WeatherModel,keyArray中存储数据需要映射的Model类型,valueArray中存储被映射的数据字段

    重要:keyArray[0,1,…n]和valueArray[0,1,…n],两数组下标对应的内容必须逐一对应,不可出现元素个数不相等的情况

    + (void)weatherCity:(NSString *)city success:(void(^)(CityWeatherModel *model))success failure:(void(^)(HttpException * e))failure{
    
        NSString *urlStr = @"[https://www.sojson.com/open/api/weather/json.shtml](https://www.sojson.com/open/api/weather/json.shtml)";
    
        NSDictionary *requestDic = @{@"city":city};//入参数据
    
        [HttpClientMgr get:urlStr params:requestDic success:^(id responseObj) {
    
            NSMutableArray *keyArray = [NSMutableArray array];
            [keyArray addObject:NSStringFromClass([WeatherModel  class])];
            [keyArray addObject:NSStringFromClass([WeatherModel  class])];
    
            NSMutableArray *valueArray = [NSMutableArray array];
            [valueArray addObject:@"yesterday"];
            [valueArray addObject:@"forecast"];
    
            CityWeatherModel *model = [CityWeatherModel parse:responseObj ClassArr:keyArray Elements:valueArray]; //NSDictionary -> Model
    
            if(success){
                success(model);
            }
    
        } failure:^(HttpException *e) {
    
            if(failure){
                failure(e);
            }
        }];
    }
    

    调用:

    [NetworkAPI weatherCity:@"北京" success:^(CityWeatherModel *model) {
    
        NSArray *dataArr = model.forecast;
    
    } failure:^(HttpException *e) {
    
    }];
    

    如何将数据呈现在界面上这里不再赘述

    相关文章

      网友评论

        本文标题:iOS开发-网络-合理封装请求接口(三)真实案例

        本文链接:https://www.haomeiwen.com/subject/kilwkftx.html