2

繰り返しを入力するのではなく、for ループを使用して以下のコードを実行する方法はありますか?

    bar1 = [[UIView alloc] init];
    bar1.backgroundColor = [UIColor blueColor];
    [self addSubview:bar1];

    bar2 = [[UIView alloc] init];
    bar2.backgroundColor = [UIColor blueColor];
    [self addSubview:bar2];

    bar3 = [[UIView alloc] init];
    bar3.backgroundColor = [UIColor blueColor];
    [self addSubview:bar3];

    bar4 = [[UIView alloc] init];
    bar4.backgroundColor = [UIColor blueColor];
    [self addSubview:bar4];

    bar5 = [[UIView alloc] init];
    bar5.backgroundColor = [UIColor blueColor];
    [self addSubview:bar5];
4

1 に答える 1

2

C配列を使用できます。

enum { NBars = 5 };

@implementation MONClass
{
  UIView * bar[NBars]; // << your ivar. could also use an NSMutableArray.
}

- (void)buildBars
{
  for (int i = 0; i < NBars; ++i) {
    bar[i] = [[UIView alloc] init];
    bar[i].backgroundColor = [UIColor blueColor];
    [self addSubview:bar[i]];
  }
}

NSArrayまたは、 :を使用できます

@interface MONClass ()
@property (nonatomic, copy) NSArray * bar;
@end

@implementation MONClass

- (void)buildBars
{
  NSMutableArray * tmp = [NSMutableArray new];
  enum { NBars = 5 };
  for (int i = 0; i < NBars; ++i) {
    UIView * view = [[UIView alloc] init];
    view.backgroundColor = [UIColor blueColor];
    [tmp addObject:view];
    [self addSubview:view];
  }
  self.bar = tmp;
}

または、これらの個々のプロパティを保持したい場合は、「文字列型」にしてKVCを使用できます。

- (void)buildBars
{
  enum { NBars = 5 };
  // if property names can be composed
  for (int i = 0; i < NBars; ++i) {
    UIView * theNewView = ...;
    [self setValue:theNewView forKey:[NSString stringWithFormat:@"bar%i", i]];
  }
}

また

- (void)buildBars
  // else property names
  for (NSString * at in @[
    // although it could use fewer characters,
    // using selectors to try to prevent some errors
    NSStringFromSelector(@selector(bar0)),
    NSStringFromSelector(@selector(bar1)),
    NSStringFromSelector(@selector(bar2)),
    NSStringFromSelector(@selector(bar3)),
    NSStringFromSelector(@selector(bar4))
  ]) {
      UIView * theNewView = ...;
      [self setValue:theNewView forKey:at];
  }
}

しかし、他にもいくつかのオプションがあります。それがあなたが始めるのに十分であることを願っています!

于 2012-11-07T01:47:10.147 に答える