zoukankan      html  css  js  c++  java
  • 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个字典操作 :%@",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"
    )

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

  • 相关阅读:
    揆首:以极客的思维做云诺
    [置顶] iOS学习笔记47——图片异步加载之EGOImageLoading
    wxWidgets初学者导引(3)——wxWidgets应用程序初体验(PDF版及附件下载)
    Win7 下用 VS2015 编译最新 openssl(1.0.2j)包含32、64位debug和release版本的dll、lib(8个版本)
    十问华为战略营销总裁徐文伟
    Debug与Release有时候确实不一致
    COM实践经验
    [置顶] (游戏编程-04)JAVA版雷电(奇迹冬瓜)
    第23章 COM和ActiveX(COM可以实现跨进程跨机器的函数调用)
    用Delphi即时判断当前的网络的连接方式
  • 原文地址:https://www.cnblogs.com/ludashi/p/3906964.html
Copyright © 2011-2022 走看看