Iphone NSDate-有更好的吗?
Iphone NSDate-有更好的吗?,iphone,objective-c,Iphone,Objective C,NSDate/NSDateFormatter等似乎为常见任务使用了太多的代码行 对于iOS开发是否有更好的东西,比如JavaScript 以下是一些常见NSDate用法的示例,其中规范解决方案可能至少小两倍: 从整数创建NSDate。解决方案: 从NSDate获取年/月/日。解决方案: 这些常见场景还有很多 我不认为有更好的方法来处理约会。但是,您可以在NSDate上创建一些类别,以便更轻松地处理日期,如果您发现自己经常重复相同的代码行,这一点尤其有用 编辑:以下是一些示例: 我认为没有更
NSDate/NSDateFormatter
等似乎为常见任务使用了太多的代码行
对于iOS开发是否有更好的东西,比如JavaScript
以下是一些常见NSDate用法的示例,其中规范解决方案可能至少小两倍:
我不认为有更好的方法来处理约会。但是,您可以在NSDate上创建一些类别,以便更轻松地处理日期,如果您发现自己经常重复相同的代码行,这一点尤其有用 编辑:以下是一些示例:
您有什么具体的抱怨吗?NSDate非常高效,特别是与NSDateFormatter和NSCalendar结合使用时,尽管您可能会认为后者的类非常臃肿和“缓慢”,但它们的深度令人难以置信
您有哪些具体投诉?关于使用类别提取NSDate的年/月/日,例如: NSDate+ComponentsExtractor.h:
#import <Foundation/Foundation.h>
typedef struct
{
NSInteger year;
NSInteger month;
NSInteger day;
} dateComponents;
@interface NSDate (ComponentsExtractor)
+ (dateComponents)componentsFromDate:(NSDate *)theDate;
@end
#import "NSDate+ComponentsExtractor.h"
@implementation NSDate (ComponentsExtractor)
+ (dateComponents)componentsFromDate:(NSDate *)theDate
{
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags fromDate:theDate];
dateComponents theComponents;
theComponents.year = [components year];
theComponents.month = [components month];
theComponents.day = [components day];
return theComponents;
}
@end
NSDate *theDate = [NSDate date]; // use the current date ...
dateComponents components = [NSDate componentsFromDate:theDate];
NSLog(@"%i - %i - %i", components.year, components.month, components.day);
使用类别:
#import <Foundation/Foundation.h>
typedef struct
{
NSInteger year;
NSInteger month;
NSInteger day;
} dateComponents;
@interface NSDate (ComponentsExtractor)
+ (dateComponents)componentsFromDate:(NSDate *)theDate;
@end
#import "NSDate+ComponentsExtractor.h"
@implementation NSDate (ComponentsExtractor)
+ (dateComponents)componentsFromDate:(NSDate *)theDate
{
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags fromDate:theDate];
dateComponents theComponents;
theComponents.year = [components year];
theComponents.month = [components month];
theComponents.day = [components day];
return theComponents;
}
@end
NSDate *theDate = [NSDate date]; // use the current date ...
dateComponents components = [NSDate componentsFromDate:theDate];
NSLog(@"%i - %i - %i", components.year, components.month, components.day);
我相信指针间接寻址也可以用于实现类似的结果,但不需要结构-它取决于人们认为最“干净”的解决方案。关于使用类别提取NSDate的年/月/日,例如: NSDate+ComponentsExtractor.h:
#import <Foundation/Foundation.h>
typedef struct
{
NSInteger year;
NSInteger month;
NSInteger day;
} dateComponents;
@interface NSDate (ComponentsExtractor)
+ (dateComponents)componentsFromDate:(NSDate *)theDate;
@end
#import "NSDate+ComponentsExtractor.h"
@implementation NSDate (ComponentsExtractor)
+ (dateComponents)componentsFromDate:(NSDate *)theDate
{
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags fromDate:theDate];
dateComponents theComponents;
theComponents.year = [components year];
theComponents.month = [components month];
theComponents.day = [components day];
return theComponents;
}
@end
NSDate *theDate = [NSDate date]; // use the current date ...
dateComponents components = [NSDate componentsFromDate:theDate];
NSLog(@"%i - %i - %i", components.year, components.month, components.day);
使用类别:
#import <Foundation/Foundation.h>
typedef struct
{
NSInteger year;
NSInteger month;
NSInteger day;
} dateComponents;
@interface NSDate (ComponentsExtractor)
+ (dateComponents)componentsFromDate:(NSDate *)theDate;
@end
#import "NSDate+ComponentsExtractor.h"
@implementation NSDate (ComponentsExtractor)
+ (dateComponents)componentsFromDate:(NSDate *)theDate
{
NSCalendar *gregorian = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
unsigned unitFlags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags fromDate:theDate];
dateComponents theComponents;
theComponents.year = [components year];
theComponents.month = [components month];
theComponents.day = [components day];
return theComponents;
}
@end
NSDate *theDate = [NSDate date]; // use the current date ...
dateComponents components = [NSDate componentsFromDate:theDate];
NSLog(@"%i - %i - %i", components.year, components.month, components.day);
我相信指针间接寻址也可以用于实现类似的结果,但不需要结构-这取决于人们认为什么是“最干净”的解决方案。您能给我们一些更具体的投诉吗?否则,除了陈词滥调之外,很难提供任何东西。为什么代码行太多?您想做什么?添加了两个具有规范解决方案的示例。“太多的代码行”已经被澄清,这意味着它可能很容易是字符数的一半或更小。您能给我们一些更具体的投诉吗?否则,除了陈词滥调之外,很难提供任何东西。为什么代码行太多?您想做什么?添加了两个具有规范解决方案的示例。“太多的代码行”已经被澄清,这意味着它很可能是一半或更小的字符。我同意,分类可能是做这些事情的最好方式。不幸的是,Objective-C不太熟悉DRY(不要重复你自己)范式……这些都很有用,我给了你+1。但是,我没有将其标记为解决方案,因为未涵盖“常见”NSDate场景(请参见示例2)。我认为这种情况很普遍,因为它有超过10张选票。我相信即使是出于这些目的,在大多数情况下,一个类别也足够了。我将发布一些代码来展示如何处理第二个示例。我同意,分类可能是做这些事情的最佳方式。不幸的是,Objective-C不太熟悉DRY(不要重复你自己)范式……这些都很有用,我给了你+1。但是,我没有将其标记为解决方案,因为未涵盖“常见”NSDate场景(请参见示例2)。我认为这种情况很普遍,因为它有超过10张选票。我相信即使是出于这些目的,在大多数情况下,一个类别也足够了。我将发布一些代码来说明如何处理第二个示例。首先,您询问具体的投诉是对的,我添加了一个链接来尝试说明。
其次,我不认为NSDate相对于其他语言中的日期类来说是高效的。您是否将生产率与Java/C#/Javascript进行过比较?不谈原始性能,只谈生产效率。与JavaScript相比,NSDate要好得多。没有Java或C方面的经验,因此无法发表评论。但是NSDate(和相关的API)非常有用,而且效率很高。也许理解起来有点晦涩,但功能强大。我指的是使用DateJS的JavaScript日期处理,它实际上让日期成为一种乐趣。是的,它是一个附加组件/助手,但这就是我的全部观点,为什么不在ObjC中有这样一个助手,这样每个人都不必创建自己的类别呢?我猜解决方案需要更多的动力/采用才能成为实际使用。我不认为NSDate和相关API有什么大问题。它可以满足您的需要,可以扩展,并且足够完整,可以在必要时进行扩展。这不是PHP,你有超大的类;Obj-C应该简洁明了。如果你想找一个“超级类别”,请看Wolfgang Schruers的例子。首先,你提出具体的抱怨是对的,我添加了一个链接,试图加以说明。
其次,我不认为NSDate相对于其他语言中的日期类来说是高效的。您是否将生产率与Java/C#/Javascript进行过比较?不谈原始性能,只谈生产效率。与JavaScript相比,NSDate要好得多。没有Java或C方面的经验,因此无法发表评论。但是NSDate(和相关的API)非常有用,而且效率很高。也许理解起来有点晦涩,但功能强大。我指的是使用DateJS的JavaScript日期处理,它实际上让日期成为一种乐趣。是的,这是一个