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

来源:https://www.cnblogs.com/cyq1162/archive/2018/03/29/8665502.html
-Advertisement-
Play Games

本篇介紹的是Sagit開發框架,網路請求相關的功能,並用IT連的源碼功能做示例,Sagit框架,讓IOS開發更簡單,你值的擁有!!! ...


前言:

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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天,登陸阿裡雲賬號後,發現伺服器有一個警告說有漏洞,修複完後要重啟伺服器,想都沒想直接重啟了。。。 接下來事情發生了,想著直接重啟mysql就行。 現象描述 [root@iZwz952coo41my3i5b7x2iZ ]# service mysqld start Starting MySQL.. ...
  • 今天在RMAN還原測試過程中,遇到了"RMAN-06172: no autobackup found or specified handle is not a valid copy or piece"這個錯誤,如下所示: RMAN> restore spfile to pfile "/u01/app... ...
  • 在C:\ProgramData\MySQL\MySQL Server 5.7文件夾 my.ini是預設的配置文件。在這裡我們只更改數據存儲路徑。不更改配置文件 1 Path to the database root 2 datadir=C:/ProgramData/MySQL/MySQL Serve ...
  • 說明:此次環境的patch p6880880_112000_Linux-x86-64.zip 和 p25476126_112040_Linux-x86-64.zip均放在/soft目錄, 且grid和oracle用戶對/soft目錄具有讀寫許可權,全程只需要root用戶執行即可。 資料庫版本 11.2 ...
  • /*按一年的周數彙總*//*超時*/ SELECT DATE_FORMAT(t.create_time, '%Y.%u') AS time, (SELECT COUNT(id) from t_task where DATE_FORMAT(create_time, '%Y.%u') = DATE_FO ...
  • 同事反應十幾分鐘前資料庫好像掛起了一會,讓我排查資料庫是否存在什麼問題。 第一反應看當前資料庫還是否有什麼等待事件,結果有direct path write等待事件。 於是抓了問題時間段20分鐘的ASH報告,發現了direct path write居首位 再順著看SQL,結果是這些INSERT操作 ...
  • Android動畫 Property Animation res/animator/filename.xml In Java: R.animator.filename In XML: @[package:]animator/filename Tween Animation res/anim/file ...
  • 下麵具體介紹下實現過程。先看效果圖。圖1. 未實現功能前, iTunes截圖 圖2. 實現功能後, iTunes截圖 圖3. 實現功能後, 運行截圖 好了, 通過圖片, 我們可以看到實現的效果。功能包括: 允許通過iTunes導入文件。 可以查看沙盒下所有文件。 實現過程:1。在應用程式的Info. ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...