2013-03-17 158 views
0

我想要做的是:演員對象類是誰的類型作爲參數傳遞

- (UIView *)getView:(UIView *)recycledView withClass:(Class)myClass 
{ 
    myClass *currentItem = (myClass*)recycledView; 
    .... 
} 

我調用這個函數如下:

[self getView:myView withClass:[SpecialView class]]; 

得到一個編譯錯誤,任何想法是否有可能實現這一點?

+5

不要用'get'前綴方法。 'get'用於一個非常具體的角色,這不是它。 – bbum 2013-03-17 15:29:31

+0

@bbum,好點 - 謝謝你! – Shai 2013-03-18 10:15:39

回答

0

轉換髮生在編譯過程中,所以嘗試轉換爲在運行時確定的類型(如在Objective-C方法調用中)是不可能的。

1

對不起,你不能這樣做。你可以做的最好的是轉換爲聲明的myClass類型。演員不修改對象,他們只是聲明已知(檢查後)類型的現有對象。

由於所有基於轉換的編譯器和JVM檢查都是靜態的,因此轉換爲動態類型沒有優勢。

5

鑄造是一個僅編譯操作。你不能在運行時施放。在運行時,您可以使用isKindOfClass:來確定課程。

一般來說,動態鑄造的需要表明代碼中的設計問題。具體來說,你沒有正確地使用繼承或多態。

對於這種情況,您可以添加:

至於所有SpecialView類的方法(也可能被抽象)。

相關問題