【问题标题】:Don't understand this syntax in Objective-C不理解 Objective-C 中的这种语法
【发布时间】:2012-08-21 09:23:19
【问题描述】:

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

有这样一行:

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

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

【问题讨论】:

  • 通常人们在条件周围使用括号以使其更具可读性:)

标签: objective-c syntax


【解决方案1】:

这是条件运算符。它所做的基本上是根据其条件返回两个值之一:

SomeType variable = condition ? valueIfTrue : valueIfFalse;

这可以解释为

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

这里的条件是

controller == self.fetchedResultsController

视图控制器的so等于self.fetchedResultsController,tableView变量会赋值给self.tableView,否则就赋值给self.searchDisplayController.searchResultsTableView

【讨论】:

  • 对不起,我从来没有学过 C 我从 Objective-c 和 Aaron Hillegass 的书开始,他提供了一个 C 的快速速成课程,但没有说任何关于这个“?”的内容。 PS:je ne peux pas accepter ta réponse avant 4 min mais merci beaucoup :-)
  • @Clarisse 不客气 - de rien, je connais le limit de 4 minutes ;)
【解决方案2】:

something ? foo : bar 只是一个较短的版本

if(something) {
   foo
} else {
   bar 
}

称为三元运算符。

所以你的一段代码变成了:

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

【讨论】:

  • 除非那是不合法的obj-c。
  • 你不能这样写 if 语句。
  • 这个和原来的不一样,因为在if之后,tableView超出了范围。
  • Blargh,好久没有 Objective-C 编码了。再次修复。
【解决方案3】:

表示如果controller等于self.fetchedResultsController,那么

设置 tableView = self.tableView,否则

设置tableView = self.searchDisplayController.searchResultsTableView

你可以把它表示为

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

【讨论】:

  • 除了不设置*tableView而是设置tableView本身。
  • 首先,谢谢大家这么快回答我的意思是真的不到一分钟你很棒,但你能决定哪个答案最适合我吗?谢谢!
  • @H2CO3:哎呀!那是仓促的错字。感谢您指出。 :)
  • @Clarisse :您可以决定哪个是最好的! :)
【解决方案4】:

这是ternary operator 的示例。

手写:

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

【讨论】:

    【解决方案5】:

    这显示ternary operator

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多