Цель-C: Изменение значения «я» внутри себя - PullRequest
1 голос
/ 29 декабря 2010

У меня есть категория на NSDate, и я хочу реализовать некоторые функции для манипулирования датой, например:

NSDate *thedate = [NSDate date];
[thedate setToMidnight];

, поэтому у меня есть функция в NSDate, например:

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

   self = theNewDate;
}

Это работает внутри функции, но вне этой функции-члена дата не изменилась. Я понимаю эту неисправность, потому что мне сказали, что self - это просто локальная переменная, созданная внутри функции-члена. Итак, как я могу сделать эту работу?

Конечно, я мог бы написать:

thedate = [thedate dateAsMidnightDate]
or thedate = [NSDate dateAtMidnightFromDate:thedate]

но я чувствую, что внутри экземпляра класса это имеет больше смысла, поскольку я не хочу изменять дату, а просто настраиваю некоторые значения ранее созданного.

1 Ответ

6 голосов
/ 29 декабря 2010

Вы не можете.В частности:

  1. Функция или метод не могут изменять локальные переменные в контексте вызова.

  2. NSDate не является изменяемой (т.е. вы не можете изменитьNSDate, как только он создан).

Следовательно, такой метод не может быть написан.Ближайшим, что вы можете получить, будет класс, который оборачивает NSDate и пересылает сообщения этому внутреннему объекту NSDate, который переназначает переменную экземпляра даты, когда вы хотите, чтобы она представляла новую дату.

...