/ / Objective-C, se avaliação de instrução - ios, objectiva-c, if-statement

Objetivo-C se avaliação de instrução - ios, objetivo-c, se-declaração

Eu quero verificar esta afirmação:

 if([optionsDictionary objectForKey:@"showTimes"]
&& [[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])

App cai. A questão é: o Objective-C verifica todas as condições? Porque em C # se 1 condição falhar, em seguida, segundo não é verificado em todos

Respostas:

1 para resposta № 1

Usar [[optionsDictionary objectForKey:@"showTimes"] boolValue] para determinar se é 0 ou 1.

Modifique sua condição como

if([optionsDictionary objectForKey:@"showTimes"]
&& (1 == [[optionsDictionary objectForKey:@"showTimes"] boolValue]))

0 para resposta № 2

(1) Se declarações e os && e || os operadores são avaliados exatamente da mesma forma em Objective-C, pois são avaliados em C, C ++ ou Java.

(2) Se você enviar uma mensagem para um objeto que seja nulo, o resultado será 0 / NO / nil. Portanto, o && é inútil. Você poderia ter acabado de escrever

if ([[optionsDictionary objectForKey:@"showTimes"]isEqualToString:@"1"])

By the way, é menos confuso para si e para todos os outros para verificar se um objeto é nulo, comparando-o a zero.

(3) Enviando um método isEqualToString para um objetoIsso não é um NSString irá falhar. A falha lhe dirá qual mensagem você enviou para o tipo de objeto. NSCFBoolean é um NSNumber com um valor booleano, por isso trava.

Você precisa saber o que está em seudicionário, ou verifique-o. Se você não colocou os valores no dicionário você mesmo, você não sabe o que está lá. Por exemplo, se você usou um analisador para analisar um documento JSON, seu código atual falhará novamente se o documento JSON contiver um valor nulo ou um dicionário.

A melhor coisa a fazer, porque isso vai acontecer com você de novo e de novo, é escrever uma categoria NSDictionary com um método boolValueForKey: que faz toda a verificação para você.