2011-07-19 50 views
1

我在我的應用程序中使用了很多NSDateComponents。代碼很長,我必須做很多複製&粘貼,當編程發生時,這是一個跡象表明,可以做得更好:)。 我讀了這個問題的答案打勾,並得到所有興奮:包裝在結構中的NSDateComponents?

NSDate get year/month/day

(閱讀評論) 我怎樣才能將它們包裝在一個結構?對不起,如果這是一個真正的初學者問題,但是...我是一個初學者。 或者還有其他方法可以解決這個問題嗎? 謝謝!

回答

2

你可以聲明你的結構是這樣的:

struct DateParts 
{ 
    NSInteger day; 
    NSInteger month; 
    NSInteger year; 
}; 

然後分配部分:

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]]; 
DateParts theParts; 
theParts.day = [components day];  
theParts.month = [components month]; 
theParts.year = [components year]; 
+0

非常感謝,這很整齊。 – strave

2

爲什麼讓他們在一個結構? NSDateComponents對象已經擁有了您需要的所有信息,只需將它傳遞給您的程序即可。如果你想讓這非常簡單,你實際上可以將組件提取邏輯添加到NSDate的類別中。像這樣:

在NSDate的+ MyComponents.h

@interface NSDate (MyComponents) 
-(NSDateComponents *) components: (NSUInteger) unitFlags; 
@end 

在NSDate的+ MyComponents.c

@implementation NSDate (MyComponents) 
-(NSDateComponents *) components: (NSUInteger) unitFlags { 
    return [[NSCalendar currentCalendar] components: unitFlags fromDate: self]; 
} 
@end 

警告:我還沒有真正因爲即時通訊在工作編譯這個目前。當我回家時將驗證邏輯。

+0

我很喜歡這個解決方案。我會測試它並檢查哪一個效果最好。 – strave