为什么dot语法在这一系列的Objective-C代码中工作但没有它呢?

时间:2014-05-21 15:21:20

标签: ios objective-c

我不能为我的生活把这个问题搞清楚。我有这行代码:

[  [cell textLabel]setText:justCourseNames [indexPath.row]   ];

它有效,但由于我必须遵循的标准,我不能使用点语法。我想我可以这样做:

[  [cell textLabel]setText:justCourseNames [indexPath row]   ];

但Objective-C没有它。我知道[indexPath row]是有效的,因为它在我使用它来获取使用NSLog的行时起作用,但不适用于上面的代码行。

任何人都可以解释原因吗?我无法理解它。我的假设是它没有通过我认为它正在传递的东西(即使文档说它只是一个数字)。

3 个答案:

答案 0 :(得分:7)

您缺少方括号

[indexPath row] 

将返回indexPath的行,并且

justCourseNames[...] 

将选择NSArray中的项目。编写这行代码的正确方法是:

[  [cell textLabel]setText:justCourseNames [ [indexPath row] ]   ];

答案 1 :(得分:1)

你误解了你正在做的格式。

要访问数组中的对象(至少是速记),请执行以下操作:

justCourseNames[i]


使用[ [cell textLabel]setText:justCourseNames [indexPath row] ];

您缺少括号来从justCourseNames调用您想要的索引。

这是您需要做的事情:

[ [cell textLabel]setText:justCourseNames[ [indexPath row] ] ];


您的第一个示例[ [cell textLabel]setText:justCourseNames [indexPath.row] ];之所以起作用的原因是因为点符号不会与用于调用数组索引的括号混合。

答案 2 :(得分:1)

[indexPath row]是一个从indexPath获取行的函数。

justCourseNames [*]从索引*的justCourseNames数组中获取一个项目。

如果你想从justCoursesNames数组的行索引中获取一个项目,你需要:

justCourseNames [[indexPath row]];

括号的内部集合用于获取行的函数,外部括号用于数组索引。

虽然稍微偏离主题,但我强烈建议您阅读类似https://github.com/NYTimes/objective-c-style-guide的样式指南,以便更好地了解点符号与括号之间/哪里更好。摘录:

  

点名称应始终用于访问和变异   属性。在所有其他情况下,首选括号符号。

     

例如:

view.backgroundColor = [UIColor orangeColor];
[UIApplication sharedApplication].delegate;
     

[view setBackgroundColor:[UIColor orangeColor]];
UIApplication.sharedApplication.delegate;

在这种情况下,row是您正在访问的属性,因此您可能应该使用indexPath.row。