Objective C字符串数组

时间:2015-10-31 17:31:55

标签: objective-c

我试图创建一个字符串数组数组,这样我最终可以得到类似于ArrayOfArrays [0] [1] =" hi"。

NSString *ArrayOne[] = {@"hello", @"hi"};
NSString *ArrayTwo[] = {@"goodbye", @"bye"};

NSArray *ArrayOfArrays[] = {@[*ArrayOne, *ArrayTwo]};

但是当我尝试这样做时,我收到一个错误:Initializer元素不是编译时常量。

我读过这是因为我创建了一个包含动态值的数组,尽管它应该是静态的。不知道如何解决这个问题。

有关制作数组字符串数组的建议吗?

3 个答案:

答案 0 :(得分:0)

如果您想在创建后修改它,请使用NSArray,或者更确切地说NSMutableArray

NSMutableArray *arrayOne = [@[@"hello", @"hi"] mutableCopy];
NSMutableArray *arrayTwo = [@[@"goodbye", @"bye"] mutableCopy];
NSMutableArray *arrayOfArrays = [@[arrayOne, arrayTwo] mutableCopy];

还有其他方法可以初始化它,但这是允许您使用 Objective-C文字语法的唯一方法。

您不能像代码尝试那样在Objective-C集合类中存储普通的'C'数组。

答案 1 :(得分:0)

您写道:

  

它应该是静态的

如果这是你想要的,那么你对C数组的使用是非常有效的,你只是语法错误。您可以使用:

NSString *arrayOfArrays[][2] =
{  {@"hello", @"hi"},
   {@"goodbye", @"bye"},
};

重要提示:2内部数组中元素的数量,在添加更多对时不会更改它。

这将为您提供编译时静态数组。

如果您制作的是从一个单词到另一个单词的地图,那么使用词典可能会更好,例如:

NSDictionary *wordMap =
   @{ @"hello" : @"hi",
      @"goodbye" : @"bye"
    };

并访问元素:

wordMap[@"hello"];

注意:这里的字典“常量”实际上是执行代码; C数组版本可以显示为全局或本地初始化程序,而字典初始化必须在方法/函数中完成 - 但它可以分配给全局。

HTH

答案 2 :(得分:-1)

NSArray *array = @[
                   @[[ @"hello", @"hi" ] mutableCopy],
                   @[[ @"goodbye", @"bye" ] mutableCopy],
                  ];

NSLog(@"%@ is short for %@", array[0][1], array[0][0]);

输出:hi是hello的缩写