2012-02-18 97 views
0

我一直想知道這一點。對自定義類使用點符號

我有一個名爲@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 - 這裏發生了什麼?

回答

3

你應該把(MyClass*)[someArray objectAtIndex:i]括號內:

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

編譯器說,財產隱私權|發佈廣告的類型ID 的對象沒有找到,但顯然我是鑄造MyClass的所以它不應該再是類型 ID - 這裏發生了什麼?

這只是一個運算符優先級問題。您將整個表達式[someArray objectAtIndex:i].hitCounter的結果投射到MyClass*,但您希望演員陣容僅適用於[someArray objectAtIndex:i]。如sch的答案所示,使用括號來糾正這種情況。