【问题标题】:Objective-C identifier from NSString来自 NSString 的 Objective-C 标识符
【发布时间】:2011-09-02 17:30:24
【问题描述】:

我想将一个 NSString 传递给一个方法,并将那个特定的 NSString 命名为一个新的 NSSMutableArray。令人困惑?以编程方式看起来像这样:

+ (void)newMutableArrayWithName:(NSString*)theArrayName
{
     NSLog(@"Creating an array that is named: %@",theArrayName);
     NSMutableArray* theArrayName = [[NSMutableArray alloc] init];
}

不幸的是,“theArrayName”与传递给方法的参数无关。有什么办法可以实现吗?

【问题讨论】:

  • 你为什么想要那个?
  • 即使在可以做到这一点的语言中,如果你认为你想动态命名一个变量,那你就大错特错了。
  • @sidyll 例如,有一个包含“everythingOnMyDesk”的数组,并为“everythingOnMyDesk”中的每个项目创建新数组。所以如果我有一个“apple”和一个“pen”,它将把它存储在“everythingOnMyDesk”中,并且会有一个名为“apple”和“pen”的新数组。
  • 问一个问题为什么真的重要吗?可以的话就回答吧。用户可能有很好的理由询问。我希望能够这样做以进行调试!

标签: objective-c nsstring nsarray


【解决方案1】:

编译器使用变量名,并在编译时设置,而不是在运行时设置。

如果您需要能够将标签与数组关联,我建议您使用 NSDictionary 来做这样的事情

NSString *theArrayName = @"My Cool Array";
NSMutableArray *theArray = [NSMutableArray array];
NSDictionary *theDictionary = [NSDictionary dictionaryWithObjectsAndKeys: 
                                      theArray, theArrayName, nil];

如果需要,您可以在字典中拥有多个“命名”数组,并且可以通过您提供的名称访问它们

[theDictionary objectForKey:@"My Cool Array"];

【讨论】:

  • 我最喜欢的做法是NSMutableDictionary* myDict; [myDict setValue:[NSArray arrayWithObjects:@"Object1",@"Object2",nil] forKey:@"My Array Name!"];
【解决方案2】:

查看key-value coding 以通过属性名称设置现有属性的值,但它似乎无法创建新属性。为此,您应该只使用字典。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 2011-12-12
    • 2014-07-30
    • 2011-03-12
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多