2012-02-18 5 views
0

저는 항상이 문제에 대해 궁금해했습니다. 맞춤 클래스에 점 표기법 사용

내가

@property라는 hitCounter을 가지고이 잘 작동합니다 :

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 - 여기 무슨 일이 일어나나요?

답변

3

당신은 괄호 안에 (MyClass*)[someArray objectAtIndex:i]을 넣어해야합니다

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

는 컴파일러는 속성 hitCounter 유형의 ID 의 객체를 찾을 수 없습니다하지만 분명히 내가 MyClass에로 캐스팅하고하는 것은 더 오래 유형 ID가 될해서는 안 말한다 - 여기서 뭐하는거야?

이는 운영자 우선 순위 문제 일뿐입니다. [someArray objectAtIndex:i].hitCounter이라는 표현식을 모두 MyClass*에 전송하고 있지만 캐스트가 [someArray objectAtIndex:i]에만 적용될 것으로 예상됩니다. sch의 대답에 나와있는 것처럼 괄호를 사용하여 상황을 바로 잡습니다.

관련 문제