微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决用于读取属性的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]; 可能有用

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。