NSArray 用一些元素加上另一个 NSArray 创建

NSArray create with some elements plus another NSArray

我正在尝试在 上使用模型继承。所以我想使用下面的代码来覆盖并调用 super 方法。

+ (NSArray *)requiredProperties {
    return @[[super requiredProperties], @"thisIsRequired",@"thisIsAlsoRequired"];
}

所以问题是:在使用另一个 NSArray 和更多元素的同时即时创建 NSArray 是否可以:

NSArray *mySecondArray = @[myFirstArray, @"andSomeExtras", @"alsoMoreExtras"];

我一直期待的是; mySecondArray 的第一个元素应该是 myFirstArray 的第一个元素。 mySecondArray 的第二个元素应该是 myFirstArray 的第二个元素,依此类推。 (myFirstArray 的大小)mySecondArray 的第 +1 个元素应该是 @"thisIsRequired" .

还是我在编什么魔法?

好吧,如您所见,我是新手,可能会感到困惑。

是的,没关系,只要你记得你在代码中的任何地方所做的事情。
但是,您通常将 NSArray 用于同类对象集合,并使用 NSDictionary,或者更好地使用您自己的 DTO class,用于异构数据聚合。


NSArray 官方文档在 arrayWithObjects:

方法的专用部分中显示了一个类似的示例

NSArray 实际上是 id 的数组,即使启用了 generics


关于 Objective C generics 的其他 link 也可能有助于理解原始 NSArray class.

的性质

为什么不使用 NSMutableArray 而只添加对象?

NSMutableArray *mySecondArray = [myFirstArray mutableCopy];
[mySecondArray addObject:@"andSomeExtras"];
[mySecondArray addObject:@"alsoMoreExtras"];

一般情况下,用Foundation来实例化这种异构数组是没问题的。这不是你想要的。在您的示例中,您最终会得到以下结果:

NSArray *myFirstArray = @[@"firstsFirstsElement", @"firstsSecondElement"];
NSArray *mySecondArray = @[myFirstArray, @"andSomeExtras", @"alsoMoreExtras"];
/* => 
@[
  @[@"firstsFirstsElement", @"firstsSecondElement"],
  @"andSomeExtras",
  @"alsoMoreExtras",
]
*/

您正在寻找 - arrayByAddingObjectsFromArray:。您可以像下面看到的那样使用它:

+ (NSArray *)requiredProperties {
    return [super.requiredProperties arrayByAddingObjectsFromArray:@[
         @"thisIsRequired",
         @"thisIsAlsoRequired",
    ]];
}