4

我一直在研究 Apple 的“您的第二个 IOS 应用程序”教程”,并且我注意到每次我使用一个NSDateFormatter用于生成日期字符串时,我都希望转换输入日期对象。

例如(页面- 在“实现 configureView 方法”下)

BirdSighting *theSighting = self.sighting;

if (theSighting) {
    self.birdNameLabel.text = [theSighting name];
    self.locationLabel.text = [theSighting location];

    self.dateLabel.text = [formatter stringFromDate:(NSDate *)theSighting.date]; // Here
}

但是我知道在BirdSighting类中该date属性始终是一个NSDate对象。

所以我想知道为什么本教程总是强制转换输入,是否有某种 Objective-C 约定或框架约定建议您这样做?如果是这样,为什么?

4

2 回答 2

4

这不是必需的。演员表只是为了清楚起见,因为该属性已经定义为 a NSDate这里

@property (nonatomic, strong) NSDate *date; 

在处理核心基础时,唯一需要以这种形式进行强制转换的情况是非弧线,如下所示:

CFDateRef asCFDate;
NSDate *asNSDate = (NSDate *) asCFDate;

但是,在 ARC 中,您将使用__bridge强制转换。

于 2012-04-16T14:58:14.450 回答
2

演员表是不必要的,我认为应该删除。

该属性已被定义为NSDate数据模型对象上的一个(除非有后续步骤将其重新定义为id或某些东西,这是值得怀疑的),因此它不会向代码的读者或编译器提供额外的信息。

于 2012-04-16T14:58:31.733 回答