在Objective-C中不理解这种语法

时间:2012-08-26 18:14:03

标签: objective-c syntax

在这个答案中:https://stackoverflow.com/a/4481896/1486928

有这样的一行:

 UITableView *tableView = controller == self.fetchedResultsController ? self.tableView : self.searchDisplayController.searchResultsTableView;

这是我第一次在同一行看到所有这些符号:/(我是初学者)。

5 个答案:

答案 0 :(得分:4)

something ? foo : bar只是

的缩短版
if(something) {
   foo
} else {
   bar 
}

它被称为三元运算符。

所以你的代码变成了:

UITableView *tableView;
if(controller == self.fetchedResultsController) {
    tableView = self.tableView;
} else {
    tableView = self.searchDisplayController.searchResultsTableView;
}

答案 1 :(得分:4)

这是条件运算符。它的作用基本上是根据条件返回两个值中的一个:

SomeType variable = condition ? valueIfTrue : valueIfFalse;

这可以解释为

SomeType variable;
if (condition) {
    variable = valueIfTrue;
} else {
    variable = valueIfFalse;
}

这里的条件是

controller == self.fetchedResultsController

因此视图控制器等于self.fetchedResultsController,tableView变量将分配给self.tableView,否则它将被分配给self.searchDisplayController.searchResultsTableView

答案 2 :(得分:2)

这意味着如果controller等于self.fetchedResultsController,那么

tableView = self.tableView,否则

设置tableView = self.searchDisplayController.searchResultsTableView

您可以将其表示为

UITableView *tableView;
 if (controller == self.fetchedResultsController)
     tableview = self.tableView;
 else
     tableview = self.searchDisplayController.searchResultsTableView;

答案 3 :(得分:1)

这会显示ternary operator

答案 4 :(得分:1)

这是ternary operator的一个例子。

写出来的:

 UITableView *tableView;
 if (controller == self.fetchedResultsController)
     tableview = self.tableView;
 else
     tableview = self.searchDisplayController.searchResultsTableView;