2016-03-02 91 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

除非您希望稍後將更多對象添加到數組中,否則不需要使用可變數組。文字的語法糖短而簡單。不變性是好的。 –