我试图创建一个字符串数组数组,这样我最终可以得到类似于ArrayOfArrays [0] [1] =" hi"。
NSString *ArrayOne[] = {@"hello", @"hi"};
NSString *ArrayTwo[] = {@"goodbye", @"bye"};
NSArray *ArrayOfArrays[] = {@[*ArrayOne, *ArrayTwo]};
但是当我尝试这样做时,我收到一个错误:Initializer元素不是编译时常量。
我读过这是因为我创建了一个包含动态值的数组,尽管它应该是静态的。不知道如何解决这个问题。
有关制作数组字符串数组的建议吗?
答案 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的缩写