Objective-C中把數組中字典中的數據轉換成URL


        可能上面的標題有些拗口,學過PHP的小伙伴們都知道,PHP中的數組的下標是允許我們自定義的,PHP中的數組確切的說就是鍵值對。而在OC我們要用字典(Dictionary)來存儲,當然了Java用的是Map來存儲鍵值對。下面我們將實現一個極為實用的小例子,網絡請求有get和post方法,兩種方法各有其優點。在表單提交時Post方法用的更多一些,URL傳值則會用到Get方法。在用PHP編程的時候肯定會經常拼接url來傳參或者請求,在IOS開發中會向服務器通過url請求一些數據,所以對url的拼接是少不了的,下面不是什么高深的技術,只是OC中集合類的一個小應用模塊,歡迎批評指正,轉載請注明出處。

        在OC中我們如何把字典中的數據拼接成我們要請求的URL字符串呢?下面有一個需求:在一個數組中有多個字典,每個字典中的數據是請求一條URL中的參數,我們需要做的就是把每個字典轉換為URL,在把每個URL放在數組中返回。下面的代碼還是對數組,字符串和字典的具體的應用。

        上面的需求對於熟練操作字典,數組,字符串的小伙伴們應該是小菜一碟吧,今天寫出來就是想記錄一些學習的點點滴滴,上面的時拼接URL, 下面的博客會URL拆分成字典,敬請期待吧!廢話少說,還是代碼走起。

        1.生成測試數據

            字典中的鍵我們一般是通過宏定義來初始化的,目的是便於維護,提高代碼編寫效率下面是對key的宏定義:

1
2
3
4
5
//定義字典鍵
#define A @"a"
#define B @"b"
#define C @"c"
#define D @"d"

    ​    ​    ​添加測試數據

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//容納字符串拼接后的字符串
NSMutableArray *arrayURL = [NSMutableArray  new ];
 
//存放可變字典的數組
NSMutableArray *arrayDic = [NSMutableArray  new ];
 
 
//生成測試數據
NSDictionary *dic1 = @{A : @10,
                        B : @20};
 
 
NSDictionary *dic2 = @{A : @10,
                        B : @20,
                        C : @30};
 
 
NSDictionary *dic3 = @{A : @10,
                        C : @30};
//把數組加入字典
[arrayDic addObject:dic1];
[arrayDic addObject:dic2];
[arrayDic addObject:dic3];

     ​    ​2.接下來我們要做的就是把上面可變數組中的字典中的數據轉換為URL,轉換的具體過程如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
//從數組中取出字典,把每個然后拼接成url
for  ( int  i = 0; i < arrayDic.count; i ++)
{
     
     NSLog(@ "對數組中第%d個字典操作\n:%@" ,i+1 ,arrayDic[i]);
     
     //URL
     NSMutableString *URL = [NSMutableString stringWithFormat:@ "http://www.baidu.com" ];
     //獲取字典的所有keys
     NSArray * keys = [arrayDic[i] allKeys];
     
     //拼接字符串
     for  ( int  j = 0; j < keys.count; j ++)
     {
         NSString *string;
         if  (j == 0)
         {
             //拼接時加?
             string = [NSString stringWithFormat:@ "?%@=%@" , keys[j], arrayDic[i][keys[j]]];
             
         }
         else
         {
             //拼接時加&
             string = [NSString stringWithFormat:@ "&%@=%@" , keys[j], arrayDic[i][keys[j]]];
         }
         //拼接字符串
         [URL appendString:string];
         
     }
     NSLog(@ "第%d個字典轉換的URL:%@" ,i+1, URL);
     //加入數組
     [arrayURL addObject:URL];
     
}

    ​    ​    ​代碼說明:

    ​    ​    ​    ​1.對數組中的每個字典遍歷

    ​    ​    ​    ​2.對每個字典中的鍵值對遍歷

    ​    ​    ​    ​3.url中如果是第一個參數拼接時加上?

    ​    ​    ​    ​4.如果不是第一個參數拼接時加上&

    ​    ​    ​    ​5.把拼接好的字符串URL加入到可變數組中然后返回存有URL的數組

    ​    ​    ​最終轉換結果為:

1
2
3
4
5
6
2014-08-12 11:41:18.927 HelloOC[997:303] 轉換完成:
(
     "http://www.baidu.com?a=10&b=20" ,
     "http://www.baidu.com?a=10&b=20&c=30" ,
     "http://www.baidu.com?a=10&c=30"
)

    ​    ​    ​那么我們應如和把轉換后的結再逆向成原來得數據格式呢?下面的博客中會提到相應的方法,謝謝朋友們的支持,不足之處還望批評指正。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM