setterメソッドをオーバーライドし、アウト情報を取得
-
09-09-2019 - |
質問
私は合成使用した後に上書きしたいセッターメソッド(setMinimumNumberOfSides)を持っています。その中で、私は、intは一定の範囲内にあることを確認するために、インスタンス変数に制約を入れています。
その後、カスタムinitメソッドでは、私は別のインスタンス変数(numberOfSides)を設定するんだけど、私は確信しminimumNumberOfSidesとmaximumNumberOfSidesが範囲内に適切に設定されたようにする必要があります。私はBOOLにセッターに戻り値を変更しようとしたので、私はYESに戻って渡すことができるか、それが成功した場合は/失敗したNO、それは矛盾する方法を作成し、私は合成使用して、セッターをオーバーライドしていますので、私は推測しています。
私は情報を得ることができますどのように簡単にセッターが呼ばれると、正常に返されたかどうかを確認するには?
-(void)setNumberOfSides:(int)sides
{
if ((sides < maximumNumberOfSides) && (sides > minimumNumberOfSides))
{
numberOfSides = sides;
}
else
NSLog (@"Invalid number of sides: %d is outside the constraints allowed", sides);
}
-(void)setMinimumNumberOfSides:(int)minimum
{
if (minimum > 2)
minimumNumberOfSides = minimum;
}
-(void)setMaximumNumberOfSides:(int)maximum
{
if (maximum <= 12)
maximumNumberOfSides = maximum;
}
-(id)initWithNumberOfSides:(int)sides minimumNumberOfSides:(int)min maximumNumberOfSides:(int)max
{
if (self = [super init])
{
self.minimumNumberOfSides = min;
self.maximumNumberOfSides = max;
self.numberOfSides = sides;
}
return self;
}
解決
あなたがゲッターとセッターの実装を計画している場合numberOfSidesを合成する必要はありません。あなたが選択した場合@synthesize numberOfSides
がなければ、あなたはBOOLを返すことができます。あなたはそれに応じてインターフェイスにゲッター/セッターを宣言する必要があります。
ところで、別のアプローチは、合成ゲッター/セッターを使用して、このチェックを実行する別のメソッド-(BOOL)isNumberOfSidesValid
を追加することであろう。
他のヒント
このような状況では、あなたがassert()
する簡単な呼び出しを使用して、または例外をスローしたほうが良いかもしれません。
の選択肢は、あなたが、このクラスが使用されて参照する方法に依存します。それはライブラリの一部になり、あなたは他の開発者が頻繁にminimumNumberOfSides
またはmaximumNumberOfSides
のために不正な値を与えることが予想される場合、あなたはおそらく適切な例外をスローする必要があります。
しかし警告の言葉、。あなたが予想される場合、は、アプリケーションのユーザーは、が頻繁に不正な値を供給するために、例外が悪い考えです。 Objective-Cでの例外処理は、高価な操作です。これらのチェックは、ユーザのための場所にある場合は、入力検証を行い、はるかに優しい方法でユーザーにエラーを報告する必要があります。
編集をここでいくつかの簡単なサンプルコードです:
-(void)setMinimumNumberOfSides:(int)minimum
{
if (minimum <= 2)
{
[NSException raise:@"invalid minimumNumberOfSides value"
format:@"value of %d is too low (must be > 2)", minimum];
}
minimumNumberOfSides = minimum;
}
編集のここでそのの別のSOの質問は、Objective-Cでの例外処理について詳しく説明します。