私はいくつかの Objective-C コードを書いていますが、一度だけ使用する値を格納するためにクラス変数を使用しなければならない状況に頻繁に遭遇しました。それを消費した後、私はもうそれを必要としません。私には、この値をクラス変数に格納するのはコードの匂いのように思えます。実際には、使用しているメソッドにパラメーターとして値を渡す必要があります。
私は通常、デリゲートを消費しているときにこれに出くわします。UIActionSheet
例として、タップされたときにロードして表示するために使用される複数のボタンを備えた UI があります。このアクション シートには、アクション シートが閉じられたときに値を設定する日付ピッカーが含まれていますUILabel
。
- (IBAction)setPurchaseDateTapped {
self.activeField = purchaseDate;
[self loadDatePickerActionSheet:@"Edit Purchase Date"];
}
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
self.activeField.text = value_from_UIActionSheet;
}
ここでわかるように、actionSheet clickedButtonAtIndex コールバックでは を渡すことができないためactiveField
、クラス変数を使用する必要があります。次のように書く方が正しいようです。
- (void)actionSheet:(UIActionSheet *)actionSheet parameterValue:(id)parameter {
parameter.text = value_from_UIActionSheet;
}
UIActionSheet と UIActionSheet デリゲートをサブクラス化し、必要な署名を追加できると思いますが (?)、これも無駄な労力のように思えます。
だから私の質問は、私がやろうとしていることを行うための最良の方法は何ですか?
作成した日付ピッカー/アクション シート インターフェイスを必ずしも変更したいわけではありません (ただし、DatePicker を邪魔にならないようにしながら UIView に複数の日付を設定するためのより良いパターンがあれば、私はすべて耳にします。)