问题描述:

The following Objective-C statement does not work correctly.

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

However, if I split it into an if() statement it works fine.

if(self.inSearchMode){

categorize=[(NSDictionary*)[self.filteredTemplates objectAtIndex:indexPath.row] objectForKey:@"categorize"];

} else {

categorize=[(NSDictionary*)[self.templates objectAtIndex:indexPath.row] objectForKey:@"categorize"];

}

What are the limitations of using the ternary operator in Objective-C? In other languages like C# the above ternary statement would have worked correctly.

网友答案:

My guess is that it's an order of operations issue. Have you tried:

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

(notice added parens)

网友答案:

@cesarislaw is probably right about the order of operations.

However, the code will be more readable if you do something like this instead (and if you really insist on use of the ternary operator ;) ):

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

categorize = [[templates objectAtIndex:indexPath.row] objectForKey:@"categorize"];
相关阅读:
Top