Sagit.Framework For IOS 开发框架入门教程6:网络请求STHttp

网友投稿 796 2022-12-02

Sagit.Framework For IOS 开发框架入门教程6:网络请求STHttp

Sagit.Framework For IOS 开发框架入门教程6:网络请求STHttp

前言:

IOS的文章,今天,再来补一篇,Sagit的教程;

虽然感觉IOS的文章没什么观众,还是努力写吧,-_-〜

Sagit 开源地址:​​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....]

STController这个基类,默认实现的有两个子类接口(msgBox:消息弹窗、get:UrlQuestionRank paras:nil success:^(STModel *result) { if (result.success) { NSMutableArray *data=(NSMutableArray*)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.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 *info) { [self.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 msg;@end

msg,可以根据具体返回的数据,进行对应的类型转换。

5、IT连中的对STHttp进行了扩展使用

下面和大伙分享一下:IT连的都是扩展了点什么:

A、对于定义API的URL,都简化了前缀

/** 注册 */#define UrlReg @"/user/register"/** 登陆 */#define

将前缀的主机部分,由扩展功能完成。

所以扩展重写了:reSetUrl函数:

@implementation STHttp(IT)-(NSString*)reSetUrl:(NSString *)url{ if(![url hasPrefix:@"&& ![url hasPrefix:@" { 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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Sagit.Framework For IOS 开发框架入门教程5:消息弹窗STMsgBox
下一篇:秋色园QBlog技术原理解析:性能优化篇:读写分离与文本数据库(十八)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~