2016-03-02 95 views
0

我想在上使用模型继承。所以我想到使用下面的代码覆盖,并且还调用super方法。NSArray创建一些元素加上另一个NSArray

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

所以问题:这是确定即时创建一个NSArray同时还采用了另一种NSArray和一些元素:

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

我一直期待的; mySecondArray的第一个元素应该是myFirstArray的第一个元素。 mySecondArray的第二个元素应该是myFirstArray等的第二个元素。 (大小为myFirstArraymySecondArray的+1个元素应该是@"thisIsRequired"

或者我在制作某种魔法?

那么,正如你所看到的,我对这些东西是新的,我可能会感到困惑。

回答

2

一般来说,使用Foundation实例化这样的异构数组是可以的。这不是你想要的。在你的榜样,你最终会代替以下:

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

您正在寻找- arrayByAddingObjectsFromArray:。你可以使用它,如下所示:

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

是的,这是好的,只要你会记得你在代码中的任何地方做什么。
但是,您通常会保留使用NSArray来获得均匀的对象集合,并使用NSDictionary或更好的自己的DTO类来进行异构数据聚合。


NSArray正式文件显示在部分类似的例子专用于方法arrayWithObjects:

NSArray是真的id阵列,即使启用generics


这等环节有关Objective C generics还可以帮助理解原始NSArray类的性质。

+0

所以,如果我是正确的; 'mySecondArray'的第一个元素将是'myFirstArray'。我期待的是:mySecondArray的第一个元素应该是myFirstArray的第一个元素。 – guness

+0

是的,'NSArray'包含对象。 'myFirstArray'是一个对象,'@'是从C字符串中创建'NSString'的语法糖。一切都是一个对象,你的代码行没有什么特别之处。你可以在obj-c中做到这一点。 –

0

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

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

这是可行的,但我已经搜索了一个快捷方式。 – guness

+0

除非您希望稍后将更多对象添加到数组中,否则不需要使用可变数组。文字的语法糖短而简单。不变性是好的。 –