Objective C Boolean Array
-
06-07-2019 - |
Frage
Ich brauche eine Reihe von booleans in Objective-c zu nutzen. Ich habe es meistens bekam eingerichtet, aber der Compiler wirft eine Warnung an die folgende Anweisung:
[updated_users replaceObjectAtIndex:index withObject:YES];
Das ist, ich bin sicher, weil ja nicht einfach ein Objekt ist; es ist ein primitiver. Egal, ich brauche, dies zu tun, und stark Beratung schätzen würde, wie man es erreichen.
Danke.
Lösung
Ja, das ist genau das, was es ist. Die NS * Behälter nur Objective-C-Objekte speichern können, nicht primitive Typen
Sie sollten fähig sein, zu erreichen, was Sie wollen, indem Sie sich in einem NSNumber Verpackung:
[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]
oder durch Verwendung @(YES)
, die eine BOOL
in einem NSNumber
hüllt
[updated_users replaceObjectAtIndex:index withObject:@(YES)]]
Sie können dann die boolValue herausziehen:
BOOL mine = [[updated_users objectAtIndex:index] boolValue];
Andere Tipps
Unter der Annahme, Ihr Array enthält gültige Objekte (und ist kein c-style-Array):
#define kNSTrue ((id) kCFBooleanTrue)
#define kNSFalse ((id) kCFBooleanFalse)
#define NSBool(x) ((x) ? kNSTrue : kNSFalse)
[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
Sie können entweder speichern NSNumbers
:
[updated_users replaceObjectAtIndex:index
withObject:[NSNumber numberWithBool:YES]];
oder verwenden Sie einen C-Array, je nach Bedarf:
BOOL array[100];
array[31] = YES;
wie Georg gesagt, verwendet, um einen C-Array.
BOOL myArray[10];
for (int i = 0; i < 10; i++){
myArray[i] = NO;
}
if (myArray[2]){
//do things;
}
Martijn "myArray" ist der Name, den Sie "Array" in Georgs Beispiel.
Von XCode 4.4 können Sie Objective-C-Literale verwenden.
[updated_users replaceObjectAtIndex:index withObject:@YES];
Wo @YES
entspricht der [NSNumber numberWithBool:YES]
Wenn Sie Ihre Sammlung groß ist oder Sie wollen es schneller als objc Objekte, versuchen Sie die CFBitVector
/ CFMutableBitVector
Typen in Corefoundation gefunden. Es ist eine des CF-Collections-Typs, die tut nicht Schiff mit einem NS Gegenstück, aber es kann schnell in einer objc Klasse gewickelt werden, falls gewünscht.