当前位置: 首页 > news >正文

网站建设相关书籍/网页设计需要学什么软件

网站建设相关书籍,网页设计需要学什么软件,做外汇可以参考的网站,无锡百度网站排名文章目录 一、JSONModel1.JSONModel的简单介绍2.JSONModel的使用 二、单例类和Block传值 一、JSONModel 1.JSONModel的简单介绍 JSONModel一个第三方库,这个库用来将网络请求到的JSON格式的数据转化成Foundation框架下的Model类的属性,这样我们就可以直…

文章目录

  • 一、JSONModel
    • 1.JSONModel的简单介绍
    • 2.JSONModel的使用
  • 二、单例类和Block传值


一、JSONModel

1.JSONModel的简单介绍

JSONModel一个第三方库,这个库用来将网络请求到的JSON格式的数据转化成Foundation框架下的Model类的属性,这样我们就可以直接通过访问Model类的属性来访问网络请求到的数据。

2.JSONModel的使用

要使用JSONModel库首先需要通过CocoaPods下载第三方库到目标文件中。接着在文件中创建一个Model类并且继承于JSONModel类。根据网络请求的JSON格式数据确定创建的类和属性。
例如JSON数据格式如下:

请添加图片描述

请添加图片描述

那么就需要在Model类中声明接收数据的协议并实现继承于JSONModel的类,这里我声明了storiesModel和top_StoriesModel两个协议并实现继承于JSONModel类的storiesModel和top_StoriesModel类来实现接收网络请求的数据。

GetModel.h

@protocol storiesModel@end@protocol top_StoriesModel@end
#import <JSONModel/JSONModel.h>
#import "JSONModel.h"
NS_ASSUME_NONNULL_BEGIN@interface storiesModel : JSONModel
@property (nonatomic, copy) NSString* image_hue;
@property (nonatomic, copy) NSString* title;
@property (nonatomic, copy) NSString* url;
@property (nonatomic, copy) NSString* hint;
@property (nonatomic, copy) NSString* ga_prefix;
@property (nonatomic, copy) NSArray* images;@end@interface top_StoriesModel : JSONModel
@property (nonatomic, copy) NSString* image_hue;
@property (nonatomic, copy) NSString* title;
@property (nonatomic, copy) NSString* url;
@property (nonatomic, copy) NSString* hint;
@property (nonatomic, copy) NSString* ga_prefix;
@property (nonatomic, copy) NSString* image;
@property (nonatomic, copy) NSString* type;
@end//设置一个字符串和两个自定义类的数组来接收网络请求的数据@interface GetModel : JSONModel
@property (nonatomic, copy) NSString* date;
@property (nonatomic, copy) NSArray<storiesModel>* stories;
@property (nonatomic, copy) NSArray<top_StoriesModel>* top_stories;
@end

GetModel.m

#import "GetModel.h"@implementation GetModel+ (BOOL)propertyIsOptional:(NSString *)propertyName {return YES;
}@end@implementation storiesModel
+ (BOOL)propertyIsOptional:(NSString *)propertyName {return YES;
}
@end@implementation top_StoriesModel+ (BOOL)propertyIsOptional:(NSString *)propertyName {return YES;
}@end

在GetModel.m中使用+ (BOOL)propertyIsOptional:(NSString *)propertyName方法来指定模型类中的属性是否为可选的。默认情况下,所有的属性都被认为是必需的,也就是说在 JSON 数据中必须存在对应的键值。但是,也可以重写该方法并返回 YES 或 NO 来指定特定属性是否可以在 JSON 数据中不出现。

二、单例类和Block传值

在iOS开发中,一般要通过一些管理类来封装特定的属性或成员变量,这时就可以用单例类来实现。原因是单例类在程序运行时只创建一次,当程序结束后才被销毁,这样会提高运行效率并且降低代码风险,但是实现单例类时又需要考虑线程安全问题,所以这里用到GCD写法来创建单例类。

在Manager.h中声明类方法

+(instancetype)sharedSingleton;

在Manager.m中定义一个局部全局变量并实现接口部分声明的类方法。

static Manager* manager = nil;
+ (instancetype)sharedSingleton {if (manager == nil) {static dispatch_once_t onceToken;dispatch_once(&onceToken, ^{manager = [[Manager alloc] init];});}return manager;
}

dispatch_ once _t: 使用 dispatch_once 方法能保证某段代码在程序运行过程中只被执行 1 次,并且即使在多线程的环境下,dispatch _once也可以保证线程安全。

在单例类中要封装网络请求并实现传值,因此需要用到Block传值

在Manager.h中定义两个Block块来接收请求到的数据并声明一个方法来封装网络请求

typedef void (^GetModelBlock)(GetModel * _Nullable mainModel);
typedef void (^ErrorBlock)(NSError * _Nullable error);
- (void)NetWorkGetWithData:(GetModelBlock)mainModelBlock andError:(ErrorBlock)errorBlock;

在Manager.m中实现该方法

- (void)NetWorkGetWithData:(GetModelBlock)mainModelBolck andError:(ErrorBlock)errorBlock {//创建一个网络请求NSString *json = @"https://news-at.zhihu.com/api/4/news/latest";json = [json stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];NSURL *netWorkDataURL = [NSURL URLWithString:json];NSURLRequest *netWorkDataRequest = [NSURLRequest requestWithURL:netWorkDataURL];//创建请求会话NSURLSession *netWorkDataSession = [NSURLSession sharedSession];//根据会话创建任务NSURLSessionDataTask *netWorkDataTask = [netWorkDataSession dataTaskWithRequest:netWorkDataRequest completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {if (error == nil) {GetModel *allGetData = [[GetModel alloc] initWithData:data error:nil];//使用Block传值mainModelBolck(allGetData);} else {errorBlock(error);}}];//启动任务[netWorkDataTask resume];
}

在主函数中

 [[Manager sharedSingleton] NetWorkGetWithData:^(GetModel * _Nullable mainModel) {NSLog(@"%@", mainModel.stories[1]);NSLog(@"获取成功");} andError:^(NSError * _Nullable error) {NSLog(@"请求失败");}];

运行结果如下:

请添加图片描述


http://www.jmfq.cn/news/5305771.html

相关文章:

  • 山东网站建设费用/优化系统的软件
  • 哈尔滨网站建设工作室/搜索引擎推广实训
  • 天津网站建设服务/seo日常工作内容
  • 苏州市住房和城乡建设局网站首页/关键词挖掘ppt
  • 淄博周村网站建设公司/合肥seo推广公司哪家好
  • 建设一个门户网站需要多久/杭州seo网站推广排名
  • 衡水网站建设优化排名/北京网站建设开发公司
  • 网站建设怎么外包好/系统优化工具
  • 中国知名网站建设公司/谷歌网站
  • 制作精美网站建设独立/媒体软文发稿
  • 加强二级网站建设 招生/十大推广app平台
  • 网站优化建设桂林/韩国网站
  • 外国纪录片网站机场建设/广告精准推广平台
  • 江苏工程建设信息网站/百度快照怎么优化排名
  • 新疆乌鲁木齐建设职业学校网站/湖南株洲疫情最新情况
  • 龙岗区住房和建设局官方网站/如何注册百度账号
  • 营销网站建设实训总结/网站免费制作平台
  • 网站建设的书 推荐/论坛seo教程
  • 山西住房建设厅官方网站/本周热点新闻事件
  • 内蒙古网站建设价格/免费b站推广网站详情
  • 传奇私服怎么建设网站/市场调研报告word模板
  • 网站建设仟首先金手指15/网络营销与推广
  • 有经验的佛山网站建设/谷歌商店paypal下载官网
  • 国内做航模比较好的网站/百度快照推广
  • 免费的网站程序/如何做网站设计
  • 网站建设科技公司外部环境分析/全媒体运营师培训机构
  • 网站 宣传册/债务优化是什么意思
  • 衢州网站推广/推广渠道有哪些方式
  • 中粮网站是哪个公司做的/网络营销带来的效果
  • 杭州网站推广宣传/网店推广方案范文