可能上面的標題有些拗口,學過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"
)
|
那么我們應如和把轉換后的結再逆向成原來得數據格式呢?下面的博客中會提到相應的方法,謝謝朋友們的支持,不足之處還望批評指正。