用于读取属性的obj-c点表示法:为什么我不能像这样将其组合?

| 我有这行代码:
[[[EntitlementsManager instance] entitlements] objectAtIndex:indexPath.row];
为什么它不能按以下方式工作:
[EntitlementsManager.instance.entitlements objectAtIndex:indexPath.row];
似乎应该对我有用?关于它为什么不编译,我有些困惑。 仅供参考,EntitlementsManager,\'instance \'是返回其单例的\'+ \'方法,而\'entitlements \'是NSArray属性。 -edit:对于那些为什么说“ instance \”是静态的“'+ \”方法而不起作用的人,为什么下面的方法行之有效?我真的很感兴趣:
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return EntitlementsManager.instance.entitlements.count;
}
-edit2:确实有效,奇怪的是:
... = [[EntitlementsManager instance].entitlements objectAtIndex:indexPath.row];
已邀请:
当解析器看到Obj-C方法调用内的
.
的左侧出现Type时,可能会感到困惑。例如,如果语法
\'[\' Type   methodAndArguments \']\'
存在,则将在解析
a \'.\' b
之前对其进行解析,并且由于
.instance ...
不是methodAndArguments的预期构造,因此编译器将失败。由于ѭ8并不是点语法的一种预期用法,因此对于编译器不支持它,甚至将来使其使用语法错误都是有效的。 请始终对类方法使用方括号表示法,因为您应该:
[[EntitlementsManager instance].entitlements objectAtIndex:0]
或将该表达式移到方括号之外:
NSArray* entitlements = EntitlementsManager.instance.entitlements;
[entitlements objectAtIndex:0];
或强迫ѭ11不匹配:
[(nil, EntitlementsManager.instance.entitlements) objectAtIndex:0]
试试这个 [(EntitlementsManager.instance.entitlements)objectAtIndex:indexPath.row]; 可能有用

要回复问题请先登录注册