0

我正在尝试在 Objective-C 中创建一个简单的 Grid 类。我创建了一个继承自 NSObject 的新 Objective-C 类。我遇到了一些麻烦。

我希望能够做这样的事情:

Grid *grid = [[Grid alloc] initWithNumRows:5 numCols:5];
int elem = grid[1][1];

但是,我知道如何创建新网格类的唯一方法是在 Grid 接口中创建 NSMutableArray 属性。

@interface Grid : NSObject
@property int numRows;
@property int numCols;
@property (strong, nonatomic) NSMutableArray *grid;

-(id) init;
-(id) initWithNumRows:(int)numRows numCols:(int)numCols;
@end

并在实施中有:

-(id) initWithNumRows:(int)numRows numCols:(int)numCols
{
    if ( (self = [super init]) )
    {
        self.numRows = numRows;
        self.numCols = numCols;
        self.grid = [[NSMutableArray alloc] init];
        for (int k = 0; k < numRows; ++ k)
        {
            NSMutableArray* subArr = [[NSMutableArray alloc] init ];
            for (int s = 0; s < numCols; ++ s)
            {
                [subArr addObject:@0];
            }
            [self.grid addObject:subArr];
        }
    }
    return self;
}

但是,这意味着如果我想使用括号表示法,我必须这样做:

Grid *myG = [[Grid alloc] initWithNumRows:5 numCols:5];
NSMutableArray *grid = myG.grid;
int elem = grid[1][1];

这似乎很麻烦,我觉得我错过了一些东西。有没有一种方法可以在 init 中返回 NSMutableArray 网格?

谢谢

4

1 回答 1

0

通过 Grid 类,我假设您的意思是一个表格/电子表格,其中有 X x Y 数量的单元格/项目。

请注意,您不能在 NSArray 中存储像 int 这样的标量类型,您必须使用 Objective-C 对象,而不是像 NSNumber。

似乎您正在尝试创建一个类来创建您需要的二维数组,您可以使用类方法来生成二维数组。

@interface Grid : NSObject
+ (NSMutableArray *)createGridWithRows:(int)numRows andColumns:(int)numCols;
@end
于 2013-08-26T07:47:49.543 回答