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.

Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top