0

整数のみを使用する NSMutableArray サブクラスの関数を作成しようとしていますが、「カウント」は使用したくありません。どうすればいいですか?

-(NSMutableArrayWithIntegers*)initWithCount:(NSInteger)count numbers:(NSInteger)firstInt, ...
{
    self = [super init];

    if (self) {
        va_list args;
        va_start(args, firstInt);
        NSInteger arg = firstInt;
        for (int i = 0; i < count; i++)
        {
            arg = va_arg(args, NSInteger);
            [self addObject: [NSNumber numberWithInteger:arg]];
        }
        va_end(args);
    }

    return self;
}
4

2 に答える 2

0

まず第一に、現在のアプローチは問題ありません。カウントを取り除こうとしないでください。代替手段はありますが、悪いだけです。

たとえば、センチネル値 (配列に挿入されない可能性があります) を最後の引数として使用できますが、この場合、実際にこの値を配列に挿入しようとしていないことを確認する必要があります。 :

- (id)initWithIntegers:(NSInteger)first, ...
{
    if (!(self = [super init])) return nil;

    va_list args;
    va_start(args, first);
    NSInteger n;
    if (first != NSIntegerMax) {
        [self addObject:@(first)];
        while ((n = va_arg(args, NSInteger)) != NSIntegerMax) {
            [self addObject:@(n)];
        }
    }

    va_end(args);

    return self;
}

しかし実際には、これは追加できる値の範囲を不必要に狭めます - そのcount引数を使用することは大したことではありません。

于 2013-04-03T13:52:07.670 に答える