2014-09-22 81 views
0

比方說,我有:在iOS中動態投射?

ThisClass *castHere = [[ThisClass alloc] init]; 

但我想有效:

ThisClassChosenAtRuntime *castHere = [[ThisClassChosenAtRuntime alloc] init]; 

我敢肯定有一些更聰明的方式去了解這一點。但這是我追求的結果。我已經有castHere遭受setValue forKey陳述。但我想動態設置*castHere

+3

你的問題不清楚。你想改變你的班的名字嗎? – Bejibun 2014-09-22 17:02:48

+0

部分答案是使用'id castHere = ...',但其餘部分取決於您如何選擇要分配的類。 – 2014-09-22 17:04:35

+0

我有幾個類,並且想要選擇哪一個應用於* castHere。每個類都有不同的屬性名稱。 – Bill3 2014-09-22 17:05:26

回答

3

如果您可以將類名建立爲字符串,那很簡單。

NSString *className = @"ThisClassChosenAtRuntime"; 
id object = [[NSClassFromString(className) alloc] init]; 

請注意,返回類型是id。您可以從類型爲id的實例調用任何方法。

對於更安全的類型,如果您可以依賴基類,則可以。

NSString *className = @"ThisClassChosenAtRuntime"; 
MyBaseClass *object = [[NSClassFromString(className) alloc] init]; 
+0

就是這樣!謝謝Jeffery和Phillip。 – Bill3 2014-09-22 17:40:57