Objective c 对自定义类使用点表示法
我一直在想这件事 我有一个名为hitCounter的Objective c 对自定义类使用点表示法,objective-c,Objective C,我一直在想这件事 我有一个名为hitCounter的@属性,它可以正常工作: 如果([[someArray objectAtIndex:i]hitCounter]!=0)继续 没问题,它能用。没有我编写的getter方法hitCounter;它之所以存在是因为@synthesis对吗 然而,属性应该允许点表示法。即使属性存在、已合成且已导入此数组中对象的类标头,也不会编译以下两项: 如果([someArray objectAtIndex:i].hitCounter!=0)继续 或 如果((MyC
@属性,它可以正常工作:
如果([[someArray objectAtIndex:i]hitCounter]!=0)继续代码>
没问题,它能用。没有我编写的getter方法hitCounter
;它之所以存在是因为@synthesis
对吗
然而,属性应该允许点表示法。即使属性存在、已合成且已导入此数组中对象的类标头,也不会编译以下两项:
如果([someArray objectAtIndex:i].hitCounter!=0)继续代码>
或
如果((MyClass*)[someArray objectAtIndex:i].hitCounter!=0)继续代码>
编译器说在id类型的对象上找不到属性hitCounter,但很明显,我正在将其强制转换为MyClass
,因此它不应该再是id类型--id
--这是怎么回事?您应该将(MyClass*)[someArray ObjectatinIndex:I]
放在括号内:
if (((MyClass*)[someArray objectAtIndex:i]).hitCounter!=0) continue;
您应该将(MyClass*)[someArray objectAtIndex:i]
放在括号内:
if (((MyClass*)[someArray objectAtIndex:i]).hitCounter!=0) continue;
编译器说在id类型的对象上找不到属性hitCounter
但很明显,我是在向我的班级播送它,所以它不应该再是类型了
这是怎么回事
这只是一个运算符优先级问题。您正在将整个表达式的结果强制转换为[someArray objectAtIndex:i].hitCounter
到MyClass*
,但您希望强制转换仅应用于[someArray objectAtIndex:i]
。使用括号纠正这种情况,如sch的回答所示
编译器说在id类型的对象上找不到属性hitCounter
但很明显,我是在向我的班级播送它,所以它不应该再是类型了
这是怎么回事
这只是一个运算符优先级问题。您正在将整个表达式的结果强制转换为[someArray objectAtIndex:i].hitCounter
到MyClass*
,但您希望强制转换仅应用于[someArray objectAtIndex:i]
。使用括号纠正这种情况,如sch的回答所示