組み込みのイニシャライザでは許可されていない方法で Cocoa コレクションを構築するためのクラス メソッドがカテゴリにあります。イニシャライザの機能が限られているため、実際にコレクションを構築するには、可変バージョンのコレクションを使用する必要があります。の例を次に示しNS{Mutable}IndexSet
ます。
@implementation NSIndexSet (WSSNonContiguous)
+ (instancetype)WSSIndexSetFromMask:(NSUInteger)mask
{
NSMutableIndexSet * set = [NSMutableIndexSet indexSet];
for( NSUInteger i = 0; i < (sizeof(NSUInteger) * 8); i++ ){
if( mask & (1l << i) ){
[set addIndex:i];
}
}
return set;
}
私の戻り値の型は、ここで嘘をつくことがあります。ユーザーが不変バージョンを要求しているかどうかに関係なく、常に可変コレクションが返されます。
instancetype
このような場合でも使用するのは適切ですか、それとも使用する必要がありid
ますか? を使用する場合instancetype
、明示的にコレクションを再作成する必要があります。
// Ick?
return [[self alloc] initWithIndexSet:set];
+[NSIndexSet WSSIndexSetFromMask:]
呼び出しが?のときに不変のコピーが返されるようにします。