当键是随机数时,如何从字典中获取键值?

问题描述 投票:0回答:2

我刚刚开始学习 Objective-C,我正在尝试使用随机数来获取该数字的键的值。

显然(对于大多数人来说)这不会编译,因为 NSNumber 和 NSUInteger 是不同的数据类型。但这是我最好的尝试,但编译器给了我以下错误:

ARC 不允许将非 Objective-C 指针类型“NSUInteger *”(又名“unsigned int *”)隐式转换为“id”

有没有人愿意指导我解决这个可能微不足道的(对你们很多人来说)问题?

这是我的尝试:

NSDictionary *refDictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
                                    @"one", [NSNumber numberWithInteger:0],
                                    @"two", [NSNumber numberWithInteger:1],
                                    @"one", [NSNumber numberWithInteger:2],
                                    @"two", [NSNumber numberWithInteger:3],
                                    @"four",[NSNumber numberWithInteger:4],
                                    @"six", [NSNumber numberWithInteger:5], nil];


        NSUInteger *dieIndex = arc4random_uniform(6);

        NSString *imageName = [refDictionary objectForKey:dieIndex];
objective-c nsstring nsdictionary nsnumber nsuinteger
2个回答
2
投票

您可以使用:

[NSNumber numberWithUnsignedInteger:dieIndex]

 NSString *imageName = [refDictionary objectForKey: [NSNumber  numberWithUnsignedInteger:dieIndex]  ];

0
投票

两个问题:

  1. 你没有

    #import <stdlib.h>
    ,所以编译器不知道在哪里可以找到
    arc4random_uniform()
    函数——更糟糕的是,你的代码暗示了它的错误签名。它返回
    u_int32_t
    ,而不是
    NSUInteger*

  2. 您应该使用相同的语法将数字转换为您已经知道如何使用的

    NSNumber

    int dieIndex = arc4random_uniform(6);
    
    NSString *imageName = [refDictionary objectForKey:[NSNumber numberWithInteger:dieIndex]];
    

如果你想让你的代码更具可读性(并且不可移植到旧版本的 iOS),你甚至可以使用新式语法:

    NSString *imageName = refDictionary[@(dieIndex)];
© www.soinside.com 2019 - 2024. All rights reserved.