Objective-C:改变自我内部的"自我"价值

Oli*_*ver 1 objective-c self nsdate categories

我在NSDate上有一个类别,我想实现一些函数来操作日期,比如:

NSDate *thedate = [NSDate date];
[thedate setToMidnight];
Run Code Online (Sandbox Code Playgroud)

所以我在NSDate中有一个函数,如:

-(void)setToMidnight {
   some code with calendars and comps

   self = theNewDate;
}
Run Code Online (Sandbox Code Playgroud)

这在函数内部工作,但在该成员函数之外,日期没有改变.我理解这个故障,因为我被告知self只是在成员函数内创建的局部变量.那么,我怎样才能做到这一点呢?

当然,我本来可以写的:

thedate = [thedate dateAsMidnightDate]
or thedate = [NSDate dateAtMidnightFromDate:thedate]
Run Code Online (Sandbox Code Playgroud)

但我觉得它在实例类中更有意义,因为我不想更改日期,只是调整以前创建的一些值.

Chu*_*uck 6

你不能.特别:

  1. 函数或方法不能修改调用上下文中的局部变量.

  2. NSDate不可变(即一旦创建NSDate就无法修改).

因此,不能编写这样的方法.您可以获得的最接近的类是包装NSDate并将消息转发到该内部NSDate对象的类,该对象在您希望使其代表新日期时重新​​分配日期实例变量.