首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对自定义类使用点表示法

对自定义类使用点表示法
EN

Stack Overflow用户
提问于 2012-02-18 22:50:49
回答 2查看 59关注 0票数 0

我一直在想这件事。

我有一个名为hitCounter的@property,它工作得很好:

if ([[someArray objectAtIndex:i] hitCounter]!=0) continue;

没问题,它起作用了。没有我写的getter方法hitCounter;它是因为@synthesize而存在的,对吗?

但是,属性应该允许使用点符号。即使该属性存在,并且合成了该属性,并且导入了此数组中对象的类头,但以下两种情况都不会编译:

if ([someArray objectAtIndex:i].hitCounter!=0) continue;

if ((MyClass*)[someArray objectAtIndex:i].hitCounter!=0) continue;

编译器说的是property hitCounter not found on object of type id,但很明显我将它转换为MyClass,所以它不应该再是id类型--这是怎么回事?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-02-18 22:54:08

您应该将(MyClass*)[someArray objectAtIndex:i]放在括号中:

代码语言:javascript
复制
if (((MyClass*)[someArray objectAtIndex:i]).hitCounter!=0) continue;
票数 3
EN

Stack Overflow用户

发布于 2012-02-18 23:00:03

编译器说在id类型的对象上找不到hitCounter属性,但是很明显我把它转换成了MyClass,所以它不应该再是id类型了--这是怎么回事?

这只是一个运算符优先级问题。您将整个表达式[someArray objectAtIndex:i].hitCounter的结果强制转换为MyClass*,但是您期望该强制转换仅应用于[someArray objectAtIndex:i]。使用括号来纠正这种情况,如sch的答案所示。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9342205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档