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" )

    ​    ​    ​那么我们应如和把转换后的结再逆向成原来得数据格式呢?下面的博客中会提到相应的方法,谢谢朋友们的支持,不足之处还望批评指正。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏一“技”之长

Objective-C中runtime机制的应用

        Objective-C是一种动态语言,所谓动态语言,是在程序执行时动态的确定变量类型,执行变量类型对应的方法的。因此,在Object-C中常用字...

9150
来自专栏iOS开发笔记

iOS开发之__NSArray0、__NSArrayI、__NSArrayM和__NSPlaceholderArray

概述 最近在整理CoreAnimation,写代码的时候遇到了下面的问题 -[__NSArrayI rectValue]: unrecognized sele...

51680
来自专栏DannyHoo的专栏

iOS中防止数组越界之后发生崩溃

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

32410
来自专栏IMWeb前端团队

Promise的简单实现

本篇文章通过构建一个简单的Promise对象来了解如何做到异步获得数据。 使用方法 const fetch = function(url) { return...

23490
来自专栏C#

C#二进制流的序列化和反序列化

1 public class BinaryHelper 2 { 3 /// <summary> 4 /...

28470
来自专栏编程之旅

iOS开发——正则表达式验证手机号、密码

App的实际应用中,用户登陆功能基本是每个App都有需求的一个功能。而当前我们很常规的做法,就是让用户把手机号作为自己的用户名,而在注册获取短信验证码的过程中,...

64320
来自专栏码生

ios OC 获取所有属性、变量 class_getProperty class_copyPropertyList class_copyIvarList

26550
来自专栏菩提树下的杨过

objective-C中的Class(类类型),Selector(选择器SEL),函数指针(IMP)

今天在园子里看到了一篇牛文“Objective-C 2.0 with Cocoa Foundation--- 5,Class类型,选择器Selector以及函数...

25250
来自专栏码生

ios 获取属性的类型

18920
来自专栏每日一篇技术文章

Swift3.0 - 黑魔法swizzle

17810

扫码关注云+社区

领取腾讯云代金券