Objectivo matriz C booleana
-
06-07-2019 - |
Pergunta
Eu preciso utilizar um array de booleanos em Objective-C. Eu tenho que principalmente configurar, mas o compilador gera um aviso no seguinte declaração:
[updated_users replaceObjectAtIndex:index withObject:YES];
Esta é, tenho certeza, porque SIM não é simplesmente um objeto; é um primitivo. Independentemente disso, eu preciso fazer isso, e gostaria muito de receber conselhos sobre como realizá-lo.
Graças.
Solução
Sim, isso é exatamente o que é:. NS * recipientes só pode armazenar objective-C objetos, não tipos primitivos
Você deve ser capaz de realizar o que você quer por envolvê-lo em uma NSNumber:
[updated_users replaceObjectAtIndex:index withObject:[NSNumber numberWithBool:YES]]
ou usando @(YES)
que envolve um BOOL
num NSNumber
[updated_users replaceObjectAtIndex:index withObject:@(YES)]]
Você pode então retirar o boolValue:
BOOL mine = [[updated_users objectAtIndex:index] boolValue];
Outras dicas
Assumindo que o seu matriz contém objetos válidos (e não é uma matriz C-estilo):
#define kNSTrue ((id) kCFBooleanTrue)
#define kNSFalse ((id) kCFBooleanFalse)
#define NSBool(x) ((x) ? kNSTrue : kNSFalse)
[updated_users replaceObjectAtIndex:index withObject:NSBool(YES)];
Você pode armazenar NSNumbers
:
[updated_users replaceObjectAtIndex:index
withObject:[NSNumber numberWithBool:YES]];
ou usar um C-matriz, dependendo de suas necessidades:
BOOL array[100];
array[31] = YES;
Como Georg dito, utilizar um array C.
BOOL myArray[10];
for (int i = 0; i < 10; i++){
myArray[i] = NO;
}
if (myArray[2]){
//do things;
}
Martijn "myArray" é o nome que você usa, "array" de Georg exemplo.
De Xcode 4.4 você pode usar literais Objective-C.
[updated_users replaceObjectAtIndex:index withObject:@YES];
Onde @YES
é equivalente a [NSNumber numberWithBool:YES]
Se sua coleção é grande ou você quer que ele seja mais rápido do que objetos ObjC, experimente os tipos CFBitVector
/ CFMutableBitVector
encontrados em CoreFoundation. É um dos CF-coleções tipos que faz não navio com uma contrapartida NS, mas pode ser envolto em uma classe objc rapidamente, se desejar.