前言:

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相关推荐

  1. 开源:Sagit.Framework For IOS 开发框架

    一:创造Sagit开发框架的起因: 记得IT连创业刚进行时,招了个IOS的女生做开发,然后: ----------女生的事故就此开始了----------- 1:面试时候:有作品,态度也不错,感觉应该 ...

  2. iOS(一):Swift纯代码模式iOS开发入门教程

    Swift纯代码模式iOS开发入门教程 项目初始化(修改为纯代码项目) 安装第三方库(以`SnapKit`库为例) 桥接OC库(QMUIKit) 封装视图并进行导航跳转 示例:使用 `TangramK ...

  3. iOS开发入门教程_iOS开发视频教程

    iOS开发入门教程 (Object-C.网络编程.多线程.蓝牙.二维码.Cocos2D.OpenGL) 适合人群:初级 课时数量:34课时 用到技术:IOS,Object-C,OpenGL,XCode ...

  4. Turbot4机器人入门教程-配置网络

     系列文章目录: Turbot4机器人入门教程-硬件清单 Turbot4机器人入门教程-软件清单 Turbot4机器人入门教程-NoMachine远程控制 Turbot4机器人入门教程-配置网络 Tu ...

  5. IOS 京东相关app 出现“网络请求失败,请检查您的网络设置”的解决办法

    问题情况 在IOS系统下,下载安装或者更新新版的京东相关app之后,打开app直接就是"网络请求失败,请检查网络设置",无论是数据连接还是wifi都试了,都是网络请求失败. 然而打 ...

  6. 【原创】iOS开发入门教程

    2019独角兽企业重金招聘Python工程师标准>>> 程序发轻狂,代码阑珊,苹果开发安卓狂!--写给狂热的编程爱好者们 ###写在前面的话 学习iOS应用程序开发已有一段时间,最近 ...

  7. stripes framework(框架)入门教程(附案例分析)

    stripes框架是基于MVC设计模式的开源的web应用框架,坚持"convention over configuration(惯例优先原则)"致力于比Struts和SpringM ...

  8. ios逆向入门教程(一)

    1.准备工作: (1)一台越狱手机,并装有以下软件:cycript,openssh (2)下载工具库,内容列表: (3)在越狱手机上,从appstore上,下载WeChat(微信). 2.ssh到手机 ...

  9. ios 应用进入后台发送网络请求不执行

    项目中有个需求,要在应用切到后台时发送请求,统计应用的活跃率等,如果统计的请求失败,就调用崩溃接口想后台发送接口请求失败的具体信息:我用的是AFNetWork来发送请求,但进入后台发送完毕,大概率发送 ...

最新文章

  1. python每个if条件后面都要使用冒号_每一个条件后面都要使用冒号。(2.0分)_学小易找答案...
  2. 马云:员工的离职原因--转载
  3. 论文的“面子”与“里子”
  4. Django集合Ueditor
  5. springcloud config服务端配置(一)
  6. C语言——小型图书管理系统(课程设计)
  7. HDOJ/HDU 1565 方格取数(1)
  8. 射频微电子学_射频人的双十二,应该这样过……
  9. Activiti7实战-入门
  10. 14个免费的 GIS 软件:以开源的方式绘制地图
  11. 扒一扒那些叫欧拉的定理们(一)——基本介绍和简单多面体欧拉定理
  12. 安庆集团-冲刺日志(第九天)
  13. hrbust 哈理工oj 1633 word!word!【欧拉路、欧拉回路的有向图判断】
  14. 视频监控国标协议介绍
  15. ramdisk.img
  16. Unity相机跟随以及子弹发射笔记
  17. 嵌入式开发之路(偏汽车电子嵌入式软件工程师学习路线图)
  18. ArcGIS教程:地理处理服务示例(裁剪与发送)(一)
  19. 让生活多点儿青春的气息
  20. C语言实现扫雷——详解

热门文章

  1. Linux 管理员手册(2)
  2. 100天后 - 100-days-later
  3. android ListView中长按背景颜色可见性设置
  4. 腾讯云详解宕机故障:光纤挖断后的150秒
  5. 10. JavaScript学习笔记——JSON
  6. ActiveMQ消息中间件简明笔记(1)——理论知识点整理
  7. kafka_2.11-0.10.2.1中的auto.offset.reset
  8. vue2.0transition过渡的使用介绍
  9. CocoaPods的安装失败方法
  10. 利用MySQL数据库来处理中英文取首字母排序