標籤:style http color java os io 資料 for
可能上面的標題有些拗口,學過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的宏定義:
12345 |
//定義字典鍵 #define A @"a" #define B @"b" #define C @"c" #define D @"d" |
? ? ?添加測試資料
1234567891011121314151617181920212223 |
//容納字串拼接後的字串 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,轉換的具體過程如下
1234567891011121314151617181920212223242526272829303132333435 |
//從數組中取出字典,把每個然後拼接成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的數組
? ? ?最終轉換結果為:
123456 |
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" ) |
? ? ?那麼我們應如和把轉換後的結再逆向成原來得資料格式呢?下面的部落格中會提到相應的方法,謝謝朋友們的支援,不足之處還望批評指正。