Objective-C - выполнение операций NSMutableArray в классе, но возврат NSArray - PullRequest
0 голосов
/ 23 ноября 2011

Извините за маленький запутанный заголовок, но скажу, что у меня есть класс с интерфейсом, который выглядит так:

@interface Class : NSObject {

    NSArray *items;
}

@property (nonatomic, retain) NSArray *items;

@end

В имплементации я на самом деле хочу сделать несколько операций добавления, используя, таким образом, NSMutableArray, и тогда пользователь, использующий класс, сможет получить данные как NSArray.

Ответы [ 4 ]

3 голосов
/ 23 ноября 2011

Объявите изменяемый массив как переменную экземпляра, объявите свойство как только для чтения NSArray и перезапишите получатель.

@interface SomeClass : NSObject {

    NSMutableArray *mutableItems;
}

@property (nonatomic, readonly) NSArray *items;

@end

@implementation SomeClass

- (NSArray *)items {
    return [NSArray arrayWithArray:mutableItems];
}

@end
1 голос
/ 23 ноября 2011

Ну, если вы не хотите, чтобы пользователь изменил массив, вы можете просто сделать это так:

@interface Class : NSObject 
- (NSArray*) items;
@end

@implementation Class
{
   NSMutableArray *items;
}

// Allocate 'items' somewhere in your init method

- (NSArray*)items
{
  return items;
}

@end
1 голос
/ 23 ноября 2011

Нет особых причин не просто возвращать NSMutableArray из метода, объявленного как возвращающий NSArray.

0 голосов
/ 23 ноября 2011

Вместо определения свойства для вашей переменной экземпляра, вы можете просто определить переменную как тип, который вы хотите, чтобы он был:

@interface Class : NSObject {
    NSMutableArray *items;
}

И используйте его как NSMutableArray:

- (id)init {
    if ((self == [super init])) {
        items = [[NSMutableArray alloc] init]; // Don't forget to release me!
    } 
}

Но затем в вашем интерфейсе определите метод получения, который возвращает NSArray:

- (NSArray *)items;

И реализовать это так:

- (NSArray *)items {
    return [NSArray arrayWithArray:items];
}
...