1

NSDateにカテゴリがあり、日付を操作するためのいくつかの関数を実装したいと思います。

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

だから私はNSDateに次のような関数を持っています:

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

   self = theNewDate;
}

これは関数内で機能しますが、このメンバー関数の外では、日付は変更されていません。自己はメンバー関数内で作成された単なるローカル変数であると言われたので、この誤動作を理解しています。では、どうすればこれを機能させることができますか?

もちろん、私は書くことができたでしょう:

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

しかし、日付を変更したくないので、以前に作成した値のいくつかの値を調整するだけなので、インスタンスクラス内でより意味があると思います。

4

1 に答える 1

6

できません。具体的には:

  1. 関数またはメソッドは、呼び出し元のコンテキストでローカル変数を変更できません。

  2. NSDateは変更できません(つまり、作成されたNSDateを変更することはできません)。

したがって、そのようなメソッドを作成することはできません。取得できる最も近いクラスは、NSDateをラップし、メッセージをその内部NSDateオブジェクトに転送するクラスです。このクラスは、新しい日付を表すようにするときに、日付インスタンス変数を再割り当てします。

于 2010-12-29T01:01:33.130 に答える