Каковы пределы использования троичного оператора в Objective-C? - PullRequest
4 голосов
/ 24 января 2012

Следующий оператор Objective C не работает правильно.

cell.templateTitle.text=[(NSDictionary*) [self.inSearchMode?self.templates:self.filteredTemplates objectAtIndex:indexPath.row] objectForKey:@"title"];

Однако, если я разделю его на оператор if(), он будет работать нормально.

if(self.inSearchMode){
  categorize=[(NSDictionary*)[self.filteredTemplates objectAtIndex:indexPath.row] objectForKey:@"categorize"];
} else {
  categorize=[(NSDictionary*)[self.templates objectAtIndex:indexPath.row] objectForKey:@"categorize"]; 
}

Что такоеограничения использования тернарного оператора в Objective-C?В других языках, таких как C #, вышеприведенное троичное выражение работало бы корректно.

Ответы [ 2 ]

10 голосов
/ 24 января 2012

Я предполагаю, что это проблема порядка операций.Вы пробовали:

[(self.inSearchMode?self.templates:self.filteredTemplates) objectAtIndex:indexPath.row]

(уведомление добавлено, парены)

8 голосов
/ 24 января 2012

@ cesarislaw, вероятно, прав насчет порядка операций.

Однако код будет более читабельным, если вы сделаете что-то подобное (и если вы действительно настаиваете на использовании троичного оператора;)):

NSDictionary * templates = (NSDictionary *) (self.inSearchMode ? self.filteredTemplates : self.templates);

categorize = [[templates objectAtIndex:indexPath.row] objectForKey:@"categorize"];
...