在 Objective-C 中使用三元运算符有哪些限制?

发布于 2024-12-28 08:36:23 字数 597 浏览 0 评论 0原文

以下 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#)中,上述三元语句可以正常工作。

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.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

最单纯的乌龟 2025-01-04 08:36:23

我的猜测是这是操作顺序问题。您尝试过吗:(

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

注意添加括号)

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)

猫九 2025-01-04 08:36:23

@cesarislaw 关于操作顺序的说法可能是正确的。

但是,如果您执行类似的操作(并且如果您确实坚持使用三元运算符 ;) ),则代码将更具可读性:

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

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

@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"];
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文