2013-08-30 24 views
3

我有一大堆這樣的上市地產的數據,但我期待它寫更整潔。你會推薦什麼方式來寫這個整潔的人?我有更多的財產數據比這些。什麼會是一個更好的寫這些數據的方式?

@property (strong,nonatomic) NSString *energyEnhancer; 
@property (strong,nonatomic) NSString *energyEnhancer1; 
@property (strong,nonatomic) NSString *energyEnhancer2; 
@property (strong,nonatomic) NSString *energyEnhancer3; 

我必須有財產,因爲我在視圖控制器之間傳遞數據。

+3

爲什麼不能有一個屬性,字符串數組? –

+0

我必須在視圖控制器之間傳遞數據。所以如果nsarray可以這樣做,我會非常樂意這樣做。 –

+0

是的,我認爲這是NNL說的最好的方式。 –

回答

3

簡短的回答:

The iOS Developer Collections Reference


原委:

我認爲這將是採取一些與collections處理的基礎類的更廣泛的外觀是一個好主意,比如NSArrayNSSetNSDictionary如果你感覺特別深奧,CFBag

你的問題建議你可以從一般的可可圖案讀了受益。事實上,你可以將任何事物從一個物體傳遞給另一個物體。一個NSArray實例肯定沒有不同於幾個NSString實例。

例如,假設我們有一個名爲「PassingData」 (GitHub link)的應用程序。我要定義一個有我們數據的類,在這種情況下,有幾個「energyEnhancer」字符串。

@interface PDDataSource : NSObject 

@property (nonatomic, strong) NSString *engergyEnhancer; 
@property (nonatomic, strong) NSString *engergyEnhancer2; 
@property (nonatomic, strong) NSString *engergyEnhancer3; 

@end 

然後在我們的視圖控制器,我們可以嘗試訪問能量增強劑,像這樣:

- (void)logDataSourceWithStrings { 

    NSLog(@"Energy enhancer 1: %@", self.dataSource.energyEnhancer); 
    NSLog(@"Energy enhancer 2: %@", self.dataSource.energyEnhancer2); 
    NSLog(@"Energy enhancer 3: %@", self.dataSource.energyEnhancer3); 
} 

另一種方式來做到這一點,像這樣:

- (void)logDataSourceWithArray { 

    for(NSInteger i = 0; i < self.dataSource.enhancers.count; i++) { 
     NSLog(@"Enhancer %i: %@", i, self.dataSource.enhancers[i]); 
     } 
} 

的加入使用數組的好處在於,您不再受編譯時聲明的變量數量的限制。您的遊戲或健身應用程序的功能更強大。

這是一種訪問數據的另一個對象的一種方式。其他強有力的競爭者是委託協議,通知和回調塊。通常,如果您直接訪問另一個類中的數據,則可能執行以下三種操作之一:

  1. 合成:創建一個包含多個存在的對象以幫助父類的類。
  2. 訪問一個單例。單例類是普遍可訪問的類,只能實例化一次。他們有爭議,但有適當的用例。
  3. 在一個對象中存儲臨時狀態。

如果你想模擬多種類型的數據,可以考慮在字典中嵌套你的值(不管是數組,字符串,數字還是其他)。不過,情況並非總是如此。我不希望我所有的課程都有一個NSDictionary屬性。用你最好的判斷力。

另一個很好的策略是建模時使用Xcode中的plist編輯器來模擬對象。然後,您可以用代碼創建一個與plist匹配的類(或類)。

真的很值得花時間熟悉這些慣例和Cocoa Design Patterns。 Lotsa運氣!

0
@property (strong, nonatomic) NSMutableArray *energyEnhancers; 

會更好。

+0

我必須擁有屬性作爲NSStrings,因爲我使用它來在視圖控制器之間傳遞數據。 –

+2

@JoeWimper爲什麼你認爲NSMutableArray不能在VC之間傳遞數據? – Kjuly

+0

@JoeWimper - 視圖控制器有什麼特別之處?一個對象是一個對象。 –

1

你可以寫這樣的..

@property (strong,nonatomic) NSString *energyEnhancer,*energyEnhancer1,*energyEnhancer2,*energyEnhancer3; 
2

而不是使用一個NSArray的一些問題的答案都建議,我想你會過得更好傳遞一個字典。這比數組更穩健,因爲您可以使用字典的鍵來確保獲得正確的值,而不是依賴於數組中的順序。

+0

同意,字典會好得多。 – Kjuly

+0

這取決於。我不想看到我的所有類都有一個字典屬性。我建議在紙上或在plist編輯器中對課程進行建模,直到一切都變得有意義。 – Moshe

+0

當然這取決於。我不想將大量的數據從一個VC傳遞到另一個。我只是說,如果這就是他所做的,那麼一個鍵值對的字典而不是匿名字符串數組就不太可能被破壞。 – Abizern

相關問題