2012-04-06 58 views
2

我可能在想這些/浪費時間試圖避免一些條件代碼 - 所以我想我會問。我已經看到了其他一些問題,但他們使用的是PHP或其他語言。使用存儲在變量中的Class名稱來調用Class方法?

在最基本的,我可以做這樣的事(我知道的語法錯誤):

 Class * var = @"Playback_Up"; 
     // call Class method to get default settings 
     NSMutableDictionary * dict = [var getPlaybackDefaults]; 

我爲什麼要這麼做?爲了避免一堆條件。我有一個應用程序,可以從一系列播放「類型」中進行選擇 - 每種類型都由「播放」類的子類處理。將類名存儲在一個數組中,然後當選擇時(從tableView)調用選定的類,創建它的一個實例等等會很方便。

這是可能的還是我在挖掘自己這裏有一個洞?

回答

5

你的第一行的正確語法是:

Class var = NSClassFromString(@"Playback_Up"); 

其餘的是罰款,我更頻繁地比你想象使用這種技術。

(除「Playback_Up」不應該是一個類課程的名稱。)


編輯:下面請注意Paul.s的評論。如果您可以在編譯時對類進行硬編碼,則首選使用+class

+2

或者[Playback_Up class]'怎麼樣? – 2012-04-06 23:58:28

+0

是的,這也很好(如果名稱是硬編碼的話也更好)。 'NSClassFromString'只是讓你處理一個變量字符串,如果你從其他地方讀取它,這很好。 – 2012-04-06 23:59:08

+1

@skinnyTOD如果你在相反的方向去做額外工作的一小部分'NSStringFromClass([MyClass class]);''這樣Xcode實際上可以在你改變類的名字時重構。 – 2012-04-07 00:02:03

相關問題