Sagit.Framework For IOS 開發架構入門教程6:網路請求STHttp,

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.