我有这行代码:
[[[EntitlementsManager instance] entitlements] objectAtIndex:indexPath.row];
为什么它不能以下面的方式工作:
[EntitlementsManager.instance.entitlements objectAtIndex:indexPath.row];
好像它对我有用吗?我对它为什么不编译感到困惑。
FYI,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];
答案 0 :(得分:1)
试试这种方式
[(EntitlementsManager.instance.entitlements)objectAtIndex:indexPath.row];
可能有效
答案 1 :(得分:1)
当Obj-C方法调用中.
左侧出现 Type 时,解析器可能会感到困惑。例如,如果语法
'[' Type methodAndArguments ']'
存在,然后在识别a '.' b
之前对其进行解析,并且由于.instance ...
不是 methodAndArguments 的预期构造,编译器将失败。由于Type.method
不是点语法的预期用法,因此编译器不支持它,或者甚至在将来使用语法错误时有效。
要么总是对类方法使用括号表示法,要么按照以下方式使用:
[[EntitlementsManager instance].entitlements objectAtIndex:0]
或将该表达式移到括号外:
NSArray* entitlements = EntitlementsManager.instance.entitlements;
[entitlements objectAtIndex:0];
或强制'[' Type methodAndArguments ']'
不匹配:
[(nil, EntitlementsManager.instance.entitlements) objectAtIndex:0]