質問

私は合成使用した後に上書きしたいセッターメソッド(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での例外処理について詳しく説明します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top