2013-01-03 47 views
2

我有一個帶有三個不同目標(比如足球,棒球,籃球)的Xcode項目,產生了三種不同的應用程序。大部分代碼是相同的,但有時它是特定於目標的。iOS:如何針對不同目標開發

實施特定於目標的方法的最佳方法是什麼?我想,以避免

if ([AppDelegate isSoccerTarget] { 
    ... 
} else if() { 
    ... 
} else if() { 
    ... 
} 

我想使用僅三個目標中的一個種類,存在,但我不能使用默認的實現。我想避免繼承,因爲有些類已經在類層次結構中,我想保持簡單(避免person => player,manager導致soccerPlayer,basketballPlayer等)。

你這樣做的方式是什麼?

回答

5

我處理這件事是我把東西都在被添加到所有目標一個超類類似的,然後我創建了一個新的類(你的榜樣「播放器」),這是每個目標的不同方式。

所以在源目錄中我會子目錄和文件:

籃球/ Player.m 棒球/ Player.m ...

然後,我會選擇「目標會員」爲籃球/ Player.m是「籃球」的目標。

這樣,我只需要實例化一個Player類一次,這取決於我的目標是什麼,它會自動創建適當的類。希望這可以幫助。

+0

聽起來不錯!只有一點:有沒有一種簡單的方法來找出哪些類是特定於目標的?我的意思是:如果添加了新的目標,您如何輕鬆地知道您必須實現新的類和方法?或者有沒有簡單的方法來實現這一目標? – swalkner

+0

我將每個目標特定類放入與該目標關聯的組中。我不知道這樣做的自動方式,但Xcode將允許您在左側項目瀏覽器中手動將它們分組。在這一點上,對於你認爲是分組他們的最佳方式,這只是一個偏好問題。 –

3

您會在Xcode項目窗格(最頂部的文件)中製作目標,然後在每個目標中的一個選項卡中(我忘記了哪一個)在預處理器宏中添加一些值(可能是預編譯器宏)。然後,在你的代碼中,你可以做到這一點:說你的棒球預處理器宏被稱爲BASEBALL,足球是SOCCER。您的代碼如下所示:

...blablablaothercode... 
#ifdef BASEBALL 
     NSLog(@"Baseball!"); 
#endif 
#ifdef SOCCER 
     NSLog(@"Soccer!"); 
#endif 
...blablablaothercode... 

這些都可以在任何可以使用正常代碼的地方使用。把它看作是一個'switch'語句,編譯器可以使用它來查看每個目標使用的代碼。

相關問題