客観的なCブール配列
-
06-07-2019 - |
質問
objective-cでブール値の配列を使用する必要があります。ほとんど設定しましたが、コンパイラは次のステートメントで警告をスローします。
[updated_users replaceObjectAtIndex:index withObject:YES];
これは、YESは単なるオブジェクトではないからです。それは原始的です。とにかく、私はこれを行う必要があり、それを達成する方法についてのアドバイスを大いに歓迎します。
ありがとう。
解決
はい、それはまさにそれです:NS *コンテナは、プリミティブ型ではなく、Objective-Cオブジェクトのみを保存できます。
NSNumberにラップすることで、目的を達成できるはずです:
[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]
または NSNumber
BOOL
をラップする @(YES)
を使用して
[updated_users replaceObjectAtIndex:index withObject:@(YES)]]
その後、boolValueを引き出すことができます:
BOOL mine = [[updated_users objectAtIndex:index] boolValue];
他のヒント
有効なオブジェクトが配列に含まれていると仮定します(Cスタイルの配列ではありません):
#define kNSTrue ((id) kCFBooleanTrue)
#define kNSFalse ((id) kCFBooleanFalse)
#define NSBool(x) ((x) ? kNSTrue : kNSFalse)
[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
NSNumbers
を保存できます:
[updated_users replaceObjectAtIndex:index
withObject:[NSNumber numberWithBool:YES]];
または必要に応じてC配列を使用します:
BOOL array[100];
array[31] = YES;
Georgのように、Cアレイを使用します。
BOOL myArray[10];
for (int i = 0; i < 10; i++){
myArray[i] = NO;
}
if (myArray[2]){
//do things;
}
Martijn、「myArray」は使用する名前、「配列」です。 georgの例。
XCode 4.4以降では、Objective-Cリテラルを使用できます。
[updated_users replaceObjectAtIndex:index withObject:@YES];
@YES
は [NSNumber numberWithBool:YES]と同等です
コレクションが大きい場合、またはobjcオブジェクトよりも高速にしたい場合は、CoreFoundationにある CFBitVector
/ CFMutableBitVector
タイプを試してください。 NSは対応していない CF-Collections型の1つですが、必要に応じてobjcクラスにすばやくラップできます。