对自定义类使用点表示法

时间:2012-02-18 14:50:49

标签: objective-c

我一直都在想这个。

我有一个名为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类型 - 这里发生了什么?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

  

编译器说在类型为id的对象上找不到属性hitCounter   但显然我将它投射到MyClass所以它不应该再是类型   id - 这里发生了什么?

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