網(wǎng)絡(luò)編程—多值參數(shù)和中文輸出

文藝求關(guān)注.png

在開發(fā)當(dāng)中,不免會遇到需要處理一些多值參數(shù)的情況毫胜,或者從后臺拿到的數(shù)據(jù)輸出中文的情況敌呈,接下來,我們詳細(xì)講解下颓哮,在開發(fā)中,遇到多值參數(shù)鸵荠,以及中文輸出冕茅,需要如何處理。

  • 多值參數(shù)的正確處理方法

    需求:如下圖蛹找,查看熱門城市的天氣預(yù)報(參數(shù)可多選)


    多值傳遞.png
// 首先姨伤,當(dāng)我點擊控制器的時候完成發(fā)送請求
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {

    // 01.確定請求URL
    NSURL *url = [NSURL URLWithString:@""];
    
    // 02.創(chuàng)建請求對象
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    
    // 03.發(fā)送請求
    [NSURLConnection sendAsynchronousRequest:request queue:[[NSOperationQueue alloc] init] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        
        // 04.解析數(shù)據(jù)
        // 先將數(shù)據(jù)打印成NSString類型先來看一下,
        NSLog(@"%@", [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]);
    }];
}

得到的結(jié)果是這樣:


解析數(shù)據(jù)為NSString最后輸出.png

<b>注意:在01處,確定請求URL的傳值</b>

// 正確傳值:http://120.25.226.186:32812/weather?place=Beijing&place=Guangzhou
// 錯誤傳值:http://120.25.226.186:32812/weather?place=Beijing&Guangzhou 系統(tǒng)會自動忽略掉后面Guangzhou

okay庸疾,繼續(xù)~~
04解析的時候乍楚,我們換一種方式解析:用JSON解析數(shù)據(jù)

// 04.解析JSON數(shù)據(jù)(注意:在開發(fā)中一般碰到的都是JSON數(shù)據(jù)解析)
// JSON --> OC對象
NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:nil];

最終答應(yīng)結(jié)果:


JSON解析結(jié)果.png

注意:紅色現(xiàn)在我們的代碼還是存在一些問題的,在狀態(tài)欄届慈,我們得到的是一堆Unicode碼徒溪,如何將Unicode碼轉(zhuǎn)化為中文呢?(如何控制字典的輸出金顿,重寫系統(tǒng)的某個方法臊泌,覆蓋掉系統(tǒng)原有的方法 — 給字典添加分類)

// 創(chuàng)建字典分類-- VtcExport(控制字典輸出的分類)

// 重寫系統(tǒng)的方法控制輸出 (此方法控制程序中所有字典的輸出)
- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level {
    //為了滿足我們的需求,即:在用到Unicode轉(zhuǎn)碼的時候來到該方法揍拆,
    // 便利字典渠概,自己拼接字典中的key和value
    
    // 自己拼接String
    // 01.先創(chuàng)建可變String
    NSMutableString *mutableString = [NSMutableString string];
    
    // 02.從字典的最外層開始拼接
    // 2.1拼接:{}
    [mutableString appendString:@"{"];
    
    // 2.2拼接 key --- value (通過self拿到字典)
    
    /**
     它就一個參數(shù)就是block,這個block攜帶了三個參數(shù)嫂拴,這將要把dictionary里面的key和value每次一組傳遞到block高氮,enumerateKeysAndObjectsUsingBlock會遍歷dictionary并把里面的key和value一組一組的展示給你慧妄,每組都會執(zhí)行這個block。這其實就是傳遞一個block到另一個方法剪芍,在這個例子里面它會帶著特定參數(shù)被反復(fù)調(diào)用塞淹,直到找到一個ENOUGH的key,然后就會通過重新賦值那個BOOL *stop來停止運行罪裹,停止遍歷同時停止調(diào)用block饱普。
     @param key 字典的Key
     @param obj 字典的Value
     @param stop 停止便利
     */
    [self enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        [mutableString appendFormat:@"%@:", key];
        [mutableString appendFormat:@"%@,", obj];
    }];
    [mutableString appendString:@"}"];
    
    //刪除逗號
    // options:NSBackwardsSearch 從后往前的模式去搜索
    NSRange range = [mutableString rangeOfString:@"," options:NSBackwardsSearch];
    
    if (range.location != NSNotFound) {
        [mutableString deleteCharactersInRange:range];
    }
    
    return mutableString;
}

重寫字典的descriptionWithLocale方法之后,我們得到:

從寫字典的descriptionWithLocale方法得到的結(jié)果.png

似乎跟我們平時見到的字典樣式還不一樣状共,( )在OC對象中代表數(shù)組套耕,所以我們還需要從寫NSArray的某個方法(descriptionWithLocale)

// 創(chuàng)建數(shù)組的分類-- VtcExport(控制數(shù)組輸出的分類)

// 重寫系統(tǒng)的方法控制輸出 (此方法控制程序中所有字典的輸出)
- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level {
 
    // 自己拼接String
    // 01.先創(chuàng)建可變String
    NSMutableString *mutableString = [NSMutableString string];
    
    
    // 02.從數(shù)組的最外層開始拼接
    [mutableString appendString:@"["];
    
    // 2.2拼接 key --- value (通過self拿到字典)
    [self enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [mutableString appendFormat:@"%@,\n", obj];
    }];

    [mutableString appendString:@"]"];
    
    //刪除逗號
    // options:NSBackwardsSearch 從后往前的模式去搜索
    NSRange range = [mutableString rangeOfString:@"," options:NSBackwardsSearch];
    if (range.location != NSNotFound) {
        [mutableString deleteCharactersInRange:range];
    }
    
    return mutableString;
}

最終,我們得到的效果是:


最終效果.png

<b>注意:由于是重寫的系統(tǒng)的方法峡继,所以在使用的時候不需要包含分類的頭文件冯袍,那我們可以簡化一下代碼,將我們重寫的系統(tǒng)方法放在一個文件里面/同樣也是可以的</b>

// 創(chuàng)建分類—Foundation+VtcExport.m
#import <Foundation/Foundation.h>

@implementation NSDictionary (VtcExport)

// 重寫系統(tǒng)的方法控制輸出 (此方法控制程序中所有字典的輸出)
- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level {
    //為了滿足我們的需求碾牌,即:在用到Unicode轉(zhuǎn)碼的時候來到該方法康愤,
    // 便利字典,自己拼接字典中的key和value
    
    // 自己拼接String
    // 01.先創(chuàng)建可變String
    NSMutableString *mutableString = [NSMutableString string];
    
    
    // 02.從字典的最外層開始拼接
    // 2.1拼接:{}
    [mutableString appendString:@"{"];
    
    // 2.2拼接 key --- value (通過self拿到字典)
    
    /**
     它就一個參數(shù)就是block舶吗,這個block攜帶了三個參數(shù)征冷,這將要把dictionary里面的key和value每次一組傳遞到block,enumerateKeysAndObjectsUsingBlock會遍歷dictionary并把里面的key和value一組一組的展示給你誓琼,每組都會執(zhí)行這個block检激。這其實就是傳遞一個block到另一個方法,在這個例子里面它會帶著特定參數(shù)被反復(fù)調(diào)用腹侣,直到找到一個ENOUGH的key叔收,然后就會通過重新賦值那個BOOL *stop來停止運行,停止遍歷同時停止調(diào)用block傲隶。
     @param key 字典的Key
     @param obj 字典的Value
     @param stop 停止便利
     */
    [self enumerateKeysAndObjectsUsingBlock:^(id  _Nonnull key, id  _Nonnull obj, BOOL * _Nonnull stop) {
        [mutableString appendFormat:@"%@:", key];
        [mutableString appendFormat:@"%@,", obj];
    }];
    [mutableString appendString:@"}"];
    
    //刪除逗號
    // options:NSBackwardsSearch 從后往前的模式去搜索
    NSRange range = [mutableString rangeOfString:@"," options:NSBackwardsSearch];
    
    if (range.location != NSNotFound) {
        [mutableString deleteCharactersInRange:range];
    }
    
    
    return mutableString;
}
@end
@implementation NSArray (VtcExport)
- (NSString *)descriptionWithLocale:(id)locale indent:(NSUInteger)level {

    // 自己拼接String
    // 01.先創(chuàng)建可變String
    NSMutableString *mutableString = [NSMutableString string];
    
    
    // 02.從數(shù)組的最外層開始拼接
    // 2.1拼接:[ ]
    [mutableString appendString:@"["];
    
    [self enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
        [mutableString appendFormat:@"%@,\n", obj];
    }];
    
    [mutableString appendString:@"]"];
    
    //刪除逗號
    // options:NSBackwardsSearch 從后往前的模式去搜索
    NSRange range = [mutableString rangeOfString:@"," options:NSBackwardsSearch];
    if (range.location != NSNotFound) {
        [mutableString deleteCharactersInRange:range];
    }
    
    return mutableString;
}

好了今穿,下次遇到如上問題,拷貝就可以了~


關(guān)注一下又不會懷孕.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伦籍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腮出,更是在濱河造成了極大的恐慌帖鸦,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胚嘲,死亡現(xiàn)場離奇詭異作儿,居然都是意外死亡,警方通過查閱死者的電腦和手機馋劈,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門攻锰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來晾嘶,“玉大人,你說我怎么就攤上這事娶吞±萦兀” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵妒蛇,是天一觀的道長机断。 經(jīng)常有香客問我,道長绣夺,這世上最難降的妖魔是什么吏奸? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮陶耍,結(jié)果婚禮上奋蔚,老公的妹妹穿的比我還像新娘。我一直安慰自己烈钞,他們只是感情好泊碑,可當(dāng)我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棵磷,像睡著了一般蛾狗。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仪媒,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天沉桌,我揣著相機與錄音,去河邊找鬼算吩。 笑死留凭,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的偎巢。 我是一名探鬼主播蔼夜,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼压昼!你這毒婦竟也來了求冷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤窍霞,失蹤者是張志新(化名)和其女友劉穎匠题,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體但金,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡韭山,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钱磅。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡梦裂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出盖淡,到底是詐尸還是另有隱情年柠,我是刑警寧澤,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布禁舷,位于F島的核電站彪杉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏牵咙。R本人自食惡果不足惜派近,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望洁桌。 院中可真熱鬧渴丸,春花似錦、人聲如沸另凌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽吠谢。三九已至土童,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間工坊,已是汗流浹背献汗。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留王污,地道東北人罢吃。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像昭齐,于是被迫代替她去往敵國和親尿招。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,792評論 2 345

推薦閱讀更多精彩內(nèi)容