Bru*_*sky 2 objective-c nsdate
我想创建一个返回NSDate. NSDate我的班级的用户可以使用 like应该是“正常的” NSDate *meetingDate = [meeting getDate];。但是当用户这样做时meetingDate.description,这是一个正常的属性/方法NSDate,我希望我的方法被调用以获取自定义格式。如果他们自己创建一个NSDate,我不希望.description改变的行为。
如何才能做到这一点?
尽管NSDate是一个类簇,正如其他人指出的那样,但Apple 实际上记录了当您想要创建自己的子类时需要做什么(请参阅子类注释)。这是一个覆盖描述方法的工作版本:
#import <Foundation/Foundation.h>
@interface MyDate : NSDate
@end
@implementation MyDate
{
NSDate * _internalDate;
}
+ (instancetype)dateWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti
{
return [[self alloc] initWithTimeIntervalSinceReferenceDate:ti];
}
- (instancetype)initWithTimeIntervalSinceReferenceDate:(NSTimeInterval)ti
{
self = [super init];
if (!self) return nil;
_internalDate = [NSDate dateWithTimeIntervalSinceReferenceDate:ti];
return self;
}
- (NSTimeInterval)timeIntervalSinceReferenceDate
{
return _internalDate.timeIntervalSinceReferenceDate;
}
- (NSString *)descriptionWithLocale:(id)locale
{
return [NSString stringWithFormat:@"%f", self.timeIntervalSince1970];
}
- (NSString *)description
{
return [NSString stringWithFormat:@"%f", self.timeIntervalSince1970];
}
@end
Run Code Online (Sandbox Code Playgroud)
看来这就是你需要做的。尽管 Apple 写道我们必须实现这些NSCopying方法,copy但MyDate按原样似乎确实可以正常工作。没有尝试过NSCoding。
请注意,您需要覆盖两者description,descriptionWithLocale:因为%@格式说明符被记录为如下工作:
Objective-C 对象,
descriptionWithLocale:如果可用,则打印为返回的字符串,description否则打印。
......并且有一个-[NSDate descriptionWithLocale:],它是首选。
测试:
NSDate *test = [MyDate dateWithTimeIntervalSince1970:1000];
NSDate *test2 = [test copy];
NSLog(@"%@", test2); // Prints: 1000.000000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |