Sagit.Framework For IOS 开发框架入门教程6:网络请求STHttp
前言:
IOS的文章,今天,再来补一篇,Sagit的教程;
虽然感觉IOS的文章没什么观众,还是努力写吧,-_-〜
Sagit 开源地址:https://github.com/cyq1162/Sagit
今天主要是分享网络请求,即STHttp的用法:
STHttp为处理网络API请求的功能的源码。
1、对外API功能调用说明:
对于网络请求,Sagit目前是对AFNetworking做了一下二次封装!
所以框架里有引用到这个第三方组件。
封装完后,目前对外调用的API:
typedef void(^Success)(STModel *result); typedef void(^Error)(NSString *errMsg); //!提供基础的网络请求(get、post、upload(图片上传)) @interface STHttp : NSObject@property (nonatomic,strong) STMsgBox *msgBox;- (instancetype)init:(STMsgBox*)msgBox; - (void)get:(NSString *)url paras:(NSDictionary *)paras success:(Success)succese; - (void)get:(NSString *)url paras:(NSDictionary *)paras success:(Success)success error:(Error)error;- (void)post:(NSString *)url paras:(NSDictionary *)paras success:(Success)success; - (void)post:(NSString *)url paras:(NSDictionary *)paras success:(Success)success error:(Error)error;- (void)upload:(NSString *)url data:(NSData *)data success:(Success)success; - (void)upload:(NSString *)url data:(NSData *)data success:(Success)success error:(Error)error;- (void)upload:(NSString *)url paras:(NSDictionary *)paras success:(Success)success; - (void)upload:(NSString *)url paras:(NSDictionary *)paras success:(Success)success error:(Error)error; - (void)setHeader:(NSString*)key v:(NSString*)value;+ (instancetype)share; + (instancetype)shareWithLoading; //-(void)networkState; @end
只有三个常用的方法:get、post、upload(图片)。
2、调用方式
对于该类的调用方式,有两种
1、在继承自STController的控制器下,直接用[self.http ...]
STController这个基类,默认实现的有两个子类接口(msgBox:消息弹窗、http:网络请求)
例如:
[self.http get:UrlQuestionRank paras:nil success:^(STModel *result) {if (result.success){NSMutableArray<id> *data=(NSMutableArray<id>*)result.msg[@"data"];STFirstTable.source=data;[STFirstTable reloadData];}}];
2、在任意地方,都可以全局的调用:用[Sagit.Http ...]
Sagit,是一个总类库的起始名称空间,很多常用功能,都是由Sagit打开头开始,后续会单独介绍。
例如:
//获取积分[Sagit.Http get:UrlIntegralShareBlog paras:nil success:^(STModel *result){if(result.success && result.msg){NSString *data=(NSString*)result.msg;if(data && data.isInt){//修改当前积分总数Sagit.Global.User.user.Integral=data.integerValue;}}}];
3、项目代码实例
下面,会和大伙分享 IT连App 中,应用到该相关的代码:
A、get用法:加载用户信息
-(void)loadUserInfo:(NSString*)userID loadComplete:(LoadComplete)loadComplete {if(![NSString isNilOrEmpty:self.Token]){NSMutableDictionary *dic=nil;if(![NSString isNilOrEmpty:userID]){dic=@{@"UserID":userID};}//检测有没有缓存if(userID){PersonalModel *mode=[Sagit.Cache get:userID];if(mode){loadComplete(mode);return;}}[Sagit.Http get:UrlUserInfo paras:dic success:^(STModel *result){PersonalModel *user=nil;if(result.success){user = [[PersonalModel alloc] initWithObject:result.msg];}if(user && userID==nil){self.User=user;}else{[Sagit.Cache set:userID value:user];}if(loadComplete!=nil){loadComplete(user);}}];}else if(loadComplete!=nil){loadComplete(nil);} }
木有效果图〜
B、post用法:登陆账号
- (void)LoginClick:(UIButton *)sender {if(![self isMatch:@"手机号" name:@"UserName" regex:RexMobile]|| ![self isMatch:@"密码" name:@"password" regex:nil]){return;}NSMutableDictionary *para = [self formData];[para setValue:@(UserAccountType) forKey:@"AccountType"];[self.http post:UrlLogin paras:para success:^(STModel *result){if (result.success) {Sagit.Global.Token=(NSString *)result.msg;[STNew(@"MainController") asRoot];}else {[self.msgBox prompt:(NSString *)result.msg];}}]; }
界面图:
C、upload用法:上传图片
- (void)headImageClick:(UIButton*)btn {[btn.imageView pick:^(NSData *data, UIImagePickerController *picker, NSDictionary<NSString *,id> *info){[self.http upload:UrlUploadPhoto paras:@{@"photo":data,@"PhotoType":@"2"} success:^(STModel *result) {if (result.success) {[self key:@"uploadPhoto" value:@"1"];[self.msgBox prompt:@"头像上传成功!"];[btn image:data];// corner:YES];}else {[self.msgBox prompt:@"头像上传失败!"];}}];} edit:YES]; }
界面图:
4、返回结果的实体类
STModel,是约定好格式的结果。
@interface STModel : STModelBase @property (nonatomic, assign) BOOL success; @property (retain, nonatomic) id<NSObject> msg;@end
msg,可以根据具体返回的数据,进行对应的类型转换。
5、IT连中的对STHttp进行了扩展使用
下面和大伙分享一下:IT连的都是扩展了点什么:
A、对于定义API的URL,都简化了前缀
/** 注册 */ #define UrlReg @"/user/register" /** 登陆 */ #define UrlLogin @"/user/login"
将前缀的主机部分,由扩展功能完成。
所以扩展重写了:reSetUrl函数:
@implementation STHttp(IT)-(NSString*)reSetUrl:(NSString *)url {if(![url hasPrefix:@"http://"] && ![url hasPrefix:@"https://"]){if([url startWith:@"/photos/"] || [url startWith:@"/qrcode/"]){url=[ImageHost append:url];}else{url=[ApiHost append:url];}}return url; } -(void)reSetHeader {[self setHeader:@"ver" v:AppVersionNum];[self setHeader:@"prod" v:STNumString(AppProdType)];if(Sagit.Global.Token){[self setHeader:@"token" v:Sagit.Global.Token];} } -(void)showError:(NSString*)errMsg {if(self.msgBox!=nil){[self.msgBox alert:@"网络连接错误"];} }
B、扩展中重写了:reSetHeader功能,用于设置一些固定的请求头。
C、扩展中重写了:showError,用于统一显示网络请求的错误信息。
总结:
本篇虽然介绍的是网络请求,但分享的代码,也都是IT连里完整的功能模块了。
Sagit框架,让IOS开发更简单,你值的拥有!!!
顺便新开:IOS Sagit 开发框架 QQ群:702724292
Sagit.Framework For IOS 开发框架入门教程6:网络请求STHttp相关推荐
- 开源:Sagit.Framework For IOS 开发框架
一:创造Sagit开发框架的起因: 记得IT连创业刚进行时,招了个IOS的女生做开发,然后: ----------女生的事故就此开始了----------- 1:面试时候:有作品,态度也不错,感觉应该 ...
- iOS(一):Swift纯代码模式iOS开发入门教程
Swift纯代码模式iOS开发入门教程 项目初始化(修改为纯代码项目) 安装第三方库(以`SnapKit`库为例) 桥接OC库(QMUIKit) 封装视图并进行导航跳转 示例:使用 `TangramK ...
- iOS开发入门教程_iOS开发视频教程
iOS开发入门教程 (Object-C.网络编程.多线程.蓝牙.二维码.Cocos2D.OpenGL) 适合人群:初级 课时数量:34课时 用到技术:IOS,Object-C,OpenGL,XCode ...
- Turbot4机器人入门教程-配置网络
系列文章目录: Turbot4机器人入门教程-硬件清单 Turbot4机器人入门教程-软件清单 Turbot4机器人入门教程-NoMachine远程控制 Turbot4机器人入门教程-配置网络 Tu ...
- IOS 京东相关app 出现“网络请求失败,请检查您的网络设置”的解决办法
问题情况 在IOS系统下,下载安装或者更新新版的京东相关app之后,打开app直接就是"网络请求失败,请检查网络设置",无论是数据连接还是wifi都试了,都是网络请求失败. 然而打 ...
- 【原创】iOS开发入门教程
2019独角兽企业重金招聘Python工程师标准>>> 程序发轻狂,代码阑珊,苹果开发安卓狂!--写给狂热的编程爱好者们 ###写在前面的话 学习iOS应用程序开发已有一段时间,最近 ...
- stripes framework(框架)入门教程(附案例分析)
stripes框架是基于MVC设计模式的开源的web应用框架,坚持"convention over configuration(惯例优先原则)"致力于比Struts和SpringM ...
- ios逆向入门教程(一)
1.准备工作: (1)一台越狱手机,并装有以下软件:cycript,openssh (2)下载工具库,内容列表: (3)在越狱手机上,从appstore上,下载WeChat(微信). 2.ssh到手机 ...
- ios 应用进入后台发送网络请求不执行
项目中有个需求,要在应用切到后台时发送请求,统计应用的活跃率等,如果统计的请求失败,就调用崩溃接口想后台发送接口请求失败的具体信息:我用的是AFNetWork来发送请求,但进入后台发送完毕,大概率发送 ...
最新文章
- python每个if条件后面都要使用冒号_每一个条件后面都要使用冒号。(2.0分)_学小易找答案...
- 马云:员工的离职原因--转载
- 论文的“面子”与“里子”
- Django集合Ueditor
- springcloud config服务端配置(一)
- C语言——小型图书管理系统(课程设计)
- HDOJ/HDU 1565 方格取数(1)
- 射频微电子学_射频人的双十二,应该这样过……
- Activiti7实战-入门
- 14个免费的 GIS 软件:以开源的方式绘制地图
- 扒一扒那些叫欧拉的定理们(一)——基本介绍和简单多面体欧拉定理
- 安庆集团-冲刺日志(第九天)
- hrbust 哈理工oj 1633 word!word!【欧拉路、欧拉回路的有向图判断】
- 视频监控国标协议介绍
- ramdisk.img
- Unity相机跟随以及子弹发射笔记
- 嵌入式开发之路(偏汽车电子嵌入式软件工程师学习路线图)
- ArcGIS教程:地理处理服务示例(裁剪与发送)(一)
- 让生活多点儿青春的气息
- C语言实现扫雷——详解
热门文章
- Linux 管理员手册(2)
- 100天后 - 100-days-later
- android ListView中长按背景颜色可见性设置
- 腾讯云详解宕机故障:光纤挖断后的150秒
- 10. JavaScript学习笔记——JSON
- ActiveMQ消息中间件简明笔记(1)——理论知识点整理
- kafka_2.11-0.10.2.1中的auto.offset.reset
- vue2.0transition过渡的使用介绍
- CocoaPods的安装失败方法
- 利用MySQL数据库来处理中英文取首字母排序