美文网首页macOS开发备忘录
NSDictionary细说(二)—— 字典的创建

NSDictionary细说(二)—— 字典的创建

作者: 刀客传奇 | 来源:发表于2017-08-27 21:15 被阅读293次

    版本记录

    版本号 时间
    V1.0 2017.08.27

    前言

    NSDictionary是不可变字典,它的不可变性可以参考NSArray数组,但是它与数组还是有很大不同,尽管他们都属于集合类,下面这几篇我们继续来将一下基础类的知识。还是老规矩从整体到局部,从浅入深进行讲解,谢谢大家。感兴趣的可以参考我上面几篇。
    1. NSDictionary细说(一)—— 整体了解

    一、+ (instancetype)dictionary;

    该方法的作用就是:创建并返回一个空的字典。该方法主要用于NSDictionary的可变子类。如果不想要临时对象,还可以使用alloc ...和init创建一个空字典。

    下面看示例代码。

    - (void)demoDictionary
    {
        NSMutableDictionary *dict = [NSMutableDictionary dictionary];
        NSLog(@"dict = %@", dict);
    }
    

    看输出结果

    2017-08-27 16:50:33.670 JJOC[6245:199913] dict = {
    }
    

    结论:空字典实例化。


    二、+ (NSDictionary<KeyType,ObjectType> *)dictionaryWithContentsOfFile:(NSString *)path;

    该方法的作用就是:使用由给定路径指定的文件中找到的键和值创建并返回字典。

    下面看一下参数和返回值:

    • path:一个完整的或相对的路径名。 由路径标识的文件必须包含属性列表的字符串表示,其根对象是字典。
    • return:一个新的字典,其中包含路径中的字典,如果存在文件错误或文件的内容是字典的无效表示,则为nil。

    还要注意:

    • 由路径标识的文件中的字典表示只能包含属性列表对象(NSString,NSData,NSDate,NSNumber,NSArray或NSDictionary对象)。 该字典包含的对象是不可变的,即使字典是可变的。

    下面看示例代码

    - (void)demoDictionaryWithContentsOfFile
    {
        NSDictionary *dict = [NSDictionary dictionaryWithContentsOfFile:@"/Users/lucy/Desktop/demo/JJOC/JJOC/Property List.plist"];
        NSLog(@"dict = %@", dict);
    }
    

    下面看输出结果

    2017-08-27 20:36:02.897 JJOC[7260:234979] dict = {
        One = 1;
        Three = 3;
        Two = 2;
    }
    

    下面看我建立的plist文件。

    结论:根据文件生成字典。


    三、+ (NSDictionary<KeyType,ObjectType> *)dictionaryWithContentsOfURL:(NSURL *)url;

    该方法的作用就是:使用由给定URL指定的资源中找到的键和值创建并返回字典。

    下面看参数:

    • url:一个URL,用于标识包含其根对象是字典的属性列表的字符串表示形式的资源。
    • return:一个包含aURL字典的新字典,如果有错误或资源的内容是字典的无效表示,则为零。

    还要注意:

    • 由路径标识的文件中的字典表示只能包含属性列表对象(NSString,NSData,NSDate,NSNumber,NSArray或NSDictionary对象)。 该字典包含的对象是不可变的,即使字典是可变的。

    结论:根据指定的URL生成字典。


    四、+ (instancetype)dictionaryWithDictionary:(NSDictionary<KeyType,ObjectType> *)dict;

    该方法的作用就是:创建并返回一个包含来自另一个给定字典的键和值的字典。

    看示例代码

    - (void)demoDictionaryWithDictionary
    {
        NSDictionary *givenDict = @{@"One" : @"1", @"Two" : @"2"};
        NSDictionary *dict = [NSDictionary dictionaryWithDictionary:givenDict];
        NSLog(@"dict = %@", dict);
    }
    

    看输出结果

    2017-08-27 20:44:18.039 JJOC[7584:243640] dict = {
        One = 1;
        Two = 2;
    }
    

    结论:根据给定字典实例化新的字典。


    五、+ (instancetype)dictionaryWithObject:(ObjectType)object forKey:(id<NSCopying>)key;

    该方法的作用是:创建并返回包含给定键和值的字典。

    看一下参数:

    • object:与aKey相对应的值。如果此值为nil,则会引发NSInvalidArgumentException
    • key:对象的键。如果此值为nil,则会引发NSInvalidArgumentException
    • return:一个包含单个对象的新字典,anObject,用于单个键,aKey。

    下面看示例代码

    - (void)demoDictionaryWithObject
    {
        NSDictionary *dict = [NSDictionary dictionaryWithObject:@"1" forKey:@"One"];
        NSLog(@"dict = %@", dict);
    }
    

    看输出结果

    2017-08-27 20:50:40.159 JJOC[7838:250574] dict = {
        One = 1;
    }
    

    结论:实例化具有单个键值对的字典。


    六、+ (instancetype)dictionaryWithObjects:(NSArray<ObjectType> *)objects forKeys:(NSArray<id<NSCopying>> *)keys;

    该方法的作用就是:创建并返回一个字典,其中包含从数组的内容生成的键和值。

    下面看输出结果:

    • objects:包含新字典值的数组。
    • keys:包含新字典键的数组。 每个密钥被复制(使用copyWithZone:;密钥必须符合NSCopying协议),并且该副本被添加到字典中。
    • return:一个新的字典,根据内容获取的键和值。

    还要注意:

    • 该方法会遍历对象和键数组,并根据其创建字典。 如果对象和键不具有相同数量的元素,则会引发NSInvalidArgumentException异常。

    下面看示例代码

    - (void)demoDictionaryWithObjects
    {
        NSArray *keys = @[@"One", @"Two"];
        NSArray *values = @[@1 , @2];
        NSDictionary *dict = [NSDictionary dictionaryWithObjects:values forKeys:keys];
        NSLog(@"dict = %@", dict);
    }
    

    看输出结果

    2017-08-27 20:58:55.582 JJOC[8099:258476] dict = {
        One = 1;
        Two = 2;
    }
    

    结论:根据键值数组和值数组创建多键值对的字典。


    七、+ (instancetype)dictionaryWithObjects:(const ObjectType _Nonnull [])objects forKeys:(const id<NSCopying> _Nonnull [])keys count:(NSUInteger)cnt;

    该方法的作用是:返回具有固定键值对数组的字典。

    下面看一下参数和返回值:

    • objects:新字典的C数组值。
    • keys:用于新字典的C数组键。 每个键被复制(使用copyWithZone:,键必须符合NSCopying协议),并且该副本被添加到新的字典中。
    • cnt:从键和对象数组中使用的元素数。 计数不得超过对象或键中元素的数量。

    还要注意:

    • 他的方法遍历对象和键数组,在新字典中创建条目。 如果key或value对象为nil,则会引发NSInvalidArgumentException异常。
    • 以下代码片段说明了如何创建将字母字符与其ASCII值相关联的字典:
    static const NSInteger N_ENTRIES = 26;
    NSDictionary *asciiDict;
    NSString *keyArray[N_ENTRIES];
    NSNumber *valueArray[N_ENTRIES];
    NSInteger i;
     
    for (i = 0; i < N_ENTRIES; i++) {
     
        char charValue = 'a' + i;
        keyArray[i] = [NSString stringWithFormat:@"%c", charValue];
        valueArray[i] = [NSNumber numberWithChar:charValue];
    }
     
    asciiDict = [NSDictionary dictionaryWithObjects:(id *)valueArray
                              forKeys:(id *)keyArray count:N_ENTRIES];
    

    看一下这个示例的输出结果

    2017-08-27 21:08:34.600 JJOC[8380:266866] asciiDict = {
        a = 97;
        b = 98;
        c = 99;
        d = 100;
        e = 101;
        f = 102;
        g = 103;
        h = 104;
        i = 105;
        j = 106;
        k = 107;
        l = 108;
        m = 109;
        n = 110;
        o = 111;
        p = 112;
        q = 113;
        r = 114;
        s = 115;
        t = 116;
        u = 117;
        v = 118;
        w = 119;
        x = 120;
        y = 121;
        z = 122;
    }
    

    结论:根据C数组包含的键值创建指定数目键值对的字典。


    八、+ (instancetype)dictionaryWithObjectsAndKeys:(id)firstObject, ...;

    该方法的作用是:创建并返回一个字典,其中包含从指定的值和键集合构造的条目。

    下面看一下参数:

    • firstObject:添加到新字典的第一个值。
    • ...:首先是firstObj的关键字,然后是一个空值终止的交替值和键列表。 如果任何键为nil,则会引发NSInvalidArgumentException异常。

    下面还要注意:

    • 该方法类似于dictionaryWithObjects:forKeys:,仅在键值对中指定的方式不同。

    看一下下面示例代码

    - (void)demoDictionaryWithObjectsAndKeysOC
    {
        NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                              @"value1", @"key1", @"value2", @"key2", nil];
        NSLog(@"dict = %@", dict);
    }
    

    看输出结果

    2017-08-27 21:13:48.833 JJOC[8664:273512] dict = {
        key1 = value1;
        key2 = value2;
    }
    

    结论:根据有序的值键排序创建字典。

    后记

    未完,待续~~~

    相关文章

      网友评论

        本文标题:NSDictionary细说(二)—— 字典的创建

        本文链接:https://www.haomeiwen.com/subject/mnxidxtx.html