Como faço para testar se um primitivo em Objective-C é nula?
-
23-08-2019 - |
Pergunta
Estou fazendo uma verificação em um aplicativo para iPhone -
int var;
if (var != nil)
Ele funciona, mas em X-Code isso está gerando um aviso "comparação entre ponteiro e inteiro." Como faço para corrigir isso?
Eu venho do mundo Java, onde eu tenho certeza que a afirmação acima falharia em compliation.
Solução
Primitives não pode ser nil
. nil
é reservada para os ponteiros para objectos Objectivo-C. nil
é tecnicamente um tipo de ponteiro, e mistura ponteiros e inteiros vão sem um elenco quase sempre resultam em um aviso do compilador, com uma exceção:. é perfeitamente ok para converter implicitamente o inteiro 0 para um ponteiro sem um elenco
Se você quiser distinguir entre 0 e "nenhum valor", use o NSNumber
classe:
NSNumber *num = [NSNumber numberWithInt:0];
if(num == nil) // compare against nil
; // do one thing
else if([num intValue] == 0) // compare against 0
; // do another thing
Outras dicas
if (var) {
...
}
Bem-vindo ao maravilhoso mundo da C. Qualquer valor diferente para o número inteiro 0 ou um ponteiro nulo é verdade.
Mas você tem um erro: ints não pode ser nulo. Eles são tipos de valor como em Java.
Se você quiser "caixa" o número inteiro, então você precisa perguntar-lo para o endereço:
int can_never_be_null = 42; // int in Java
int *can_be_null = &can_never_be_null; // Integer in Java
*can_be_null = 0; // Integer.set or whatever
can_be_null = 0; // This is setting "the box" to null,
// NOT setting the integer value