Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSDate-有更好的吗?_Iphone_Objective C - Fatal编程技术网

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获取年/月/日。解决方案:
  • 这些常见场景还有很多

  • 我不认为有更好的方法来处理约会。但是,您可以在NSDate上创建一些类别,以便更轻松地处理日期,如果您发现自己经常重复相同的代码行,这一点尤其有用

    编辑:以下是一些示例:


    我认为没有更好的方法来处理与生俱来的约会。但是,您可以在NSDate上创建一些类别,以便更轻松地处理日期,如果您发现自己经常重复相同的代码行,这一点尤其有用

    编辑:以下是一些示例:


    NSDate非常高效,特别是与NSDateFormatter和NSCalendar结合使用时,尽管您可能会认为后者的类非常臃肿且“缓慢”,但它们的深度令人难以置信


    您有什么具体的抱怨吗?

    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日期处理,它实际上让日期成为一种乐趣。是的,这是一个