私は新しいです。短くする方法を教えてください:
effects = [[NSArray alloc] initWithObjects:@"Back1.jpg", @"Back2.jpg", @"Back3.jpg", @"Back4.jpg", @"Back5.jpg", @"Back6.jpg", @"Back7.jpg", @"Back8.jpg",@"Back9.jpg",nil];
thnaks。@"back%i.jpg", int++ のようなものが欲しい
私は新しいです。短くする方法を教えてください:
effects = [[NSArray alloc] initWithObjects:@"Back1.jpg", @"Back2.jpg", @"Back3.jpg", @"Back4.jpg", @"Back5.jpg", @"Back6.jpg", @"Back7.jpg", @"Back8.jpg",@"Back9.jpg",nil];
thnaks。@"back%i.jpg", int++ のようなものが欲しい
必要な配列の大きさに応じて、NSArray の非常に単純なサブクラスを利用できます。count
と の 2 つのメソッドをオーバーライドするだけで済みますobjectAtIndex:
。
@interface StringArray : NSArray
@end
@implementation StringArray
-(NSUInteger)count {
return 9;
}
-(id)objectAtIndex:(NSUInteger)index {
return [NSString stringWithFormat:@"Back%ld.jpg", (long)(index +1)];
}
@end
使用するには、インスタンス化するだけです。
NSArray *stringArray = [[StringArray alloc] init];
NSLog(@"Array: %@", stringArray);
このソリューションでは、for ループを介して配列を構築する場合と比較して、数行の余分なコードを使用しますが、利点として、大きな配列に対して使用するメモリが少なくて済みます。
このような配列は、配列コントローラーのモデル オブジェクトとしていくつかの状況で役立ちます。
コード レビューにどのように耐えられるかはわかりません。ハードコードされたサイズとフォーマット文字列に何らかの作業が必要になる可能性があることに気付く人もいるでしょう。