2013-02-12 48 views
0

在我-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法我有這樣的代碼返回YouTube視頻日期電池標籤:使代碼儘可能模塊化與私有方法

//Video upload date 
    NSString *formattedString = [[[self.videos objectAtIndex:indexPath.row] objectForKey:@"uploaded"] stringByReplacingOccurrencesOfString:@"T" withString:@""]; 

    formattedString = [formattedString stringByReplacingCharactersInRange:NSMakeRange(18, 5) withString:@""]; 

    NSDateFormatter *df = [[NSDateFormatter alloc] init]; 

    [df setDateFormat:@"yyyy-MM-ddHH:mm:ss"]; 

    NSDate *date = [df dateFromString:formattedString]; 

    [df setDateFormat:@"dd/MM/yyyy"]; 

    NSString *dateStr = [df stringFromDate:date]; 

    cell.date.text = dateStr; 

我的方法實現看起來有點亂,我想知道什麼是正確的做法。我應該保留這些代碼嗎?或者我應該爲日期格式創建另一個私有方法?

讓我說我想做私人方法。例如:

-(NSString *)formatDateWithString:(NSString *) mystring { 

     NSString *formattedString = [mystring stringByReplacingOccurrencesOfString:@"T" withString:@""]; 

     formattedString = [formattedString stringByReplacingCharactersInRange:NSMakeRange(18, 5) withString:@""]; 

     NSDateFormatter *df = [[NSDateFormatter alloc] init]; 

     [df setDateFormat:@"yyyy-MM-ddHH:mm:ss"]; 

     NSDate *date = [df dateFromString:formattedString]; 

     [df setDateFormat:@"dd/MM/yyyy"]; 

     NSString *dateStr = [df stringFromDate:date]; 

     return dateStr; 
     } 

我應該在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中寫什麼?

我的私人方法的參數將是[self.videos objectAtIndex:indexPath.row],但我失去了如何調用此方法和哪個實例變量?

我需要在我的視圖類中創建一個NSString實例變量,或者我可以在-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中啓動NSString實例並在其上執行我的私有方法?

+0

一般的經驗法則是,如果你打算重用的邏輯,然後將其放置到一個可重用的對象。這個想法是防止重複。在你的情況下,創建一個'DateUtils'類並將你的邏輯放在那裏。創建一個類別將是另一種選擇。 – Jeremy 2013-02-12 18:11:34

+0

可能的重複:http://stackoverflow.com/questions/172598/best-way-to-define-private-methods-for-a-class-in-objective-c – Kekoa 2013-02-12 18:12:09

回答

2

一般的經驗法則是,如果你打算重用邏輯,然後把它放入一個可重用的對象。這個想法是爲了防止重複。在你的情況下,你如何創建一個DateUtils類並把你的邏輯放在那裏。創建一個類別將是另一種選擇。

實例應用:

NSString *youtubeVideoDateStr = [DateUtils formatDateWithString:@"..."]; 
+0

但如果我不打算重用邏輯,它只會在我的UITableView方法中使用一次,而不是我應該把它放在原來的位置?這是我uni任務的一部分,我不確定這是否應該單獨保存,以使我的代碼看起來更清晰。 – Guferos 2013-02-12 18:19:30

+0

你需要更廣泛地思考一下。你可能不認爲你現在需要重用它,但是你應該習慣於將通用邏輯放入它自己的可重用空間中。你可以決定在其他地方做一些格式化的日期。考慮一下,就好像你正在爲你的工具箱添加一個有用的工具,隨着你的程序變得更加複雜,這將變得非常有用。 – Jeremy 2013-02-12 18:23:00

+0

好的。謝謝,我會牢記這一點。 – Guferos 2013-02-12 18:24:35

1

這個問題並沒有真正的「正確」答案。 「看起來很亂」不是一個可量化的問題,所以沒有辦法衡量任何變化的正確性。

如果您可以創建一個代碼更易於維護的案例,那麼您可能有理由將時間重新考慮。花更多的時間花在學習它所花費的時間上,而不是簡化它呢?