سؤال

لدي طريقة STERTER (SetMinimumNumbersidesides) التي أرغب في تجاوزها بعد استخدام توليفها. في ذلك، أنا أضع في قيود على متغير المثيل للتأكد من أن INT ضمن حدود معينة.

في وقت لاحق بطريقة تابعة مخصصة، أقوم بتعيين متغير مثيل آخر (NumberOfsides)، لكنني بحاجة إلى التأكد من أن الحد الأدنى لعمليات الحد الأدنى وتم ضبط Moundsnumbersides بشكل صحيح داخل الحدود. حاولت تغيير قيمة الإرجاع على STERTER إلى BOOL، لذلك يمكنني تمرير نعم أو لا إذا نجحت / فشلت، ولكنها خلقت طريقة تتعارض، وأنا أظن لأنني أستخدم توليفها وتجاوز STERTER.

كيف يمكنني الحصول على المعلومات بسهولة للتحقق لمعرفة ما إذا كان STERTER تم استدعاؤه وإرجاعه بنجاح؟

-(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 إذا كنت تخطط لتنفيذ Getter و STERTER. بدون @synthesize numberOfSides يمكنك إرجاع bool إذا اخترت. ستحتاج إلى إعلان الحصول على Getter / Setter في واجهةك وفقا لذلك.

راجع للشغل، سيتم استخدام نهج آخر لاستخدام Getter / Setter مركب وإضافة طريقة منفصلة -(BOOL)isNumberOfSidesValid مما يؤدي هذا الشيك.

نصائح أخرى

في موقف مثل هذا، قد تكون أفضل حالا باستخدام مكالمة بسيطة إلى assert(), أو رمي استثناء.

يعتمد الاختيار على كيفية استخدامك هذه الفئة المستخدمة. إذا كانت جزءا من مكتبة، فنت تتوقع مطورو آخرين لتوفير قيم غير صحيحة بشكل متكرر minimumNumberOfSides أو maximumNumberOfSides, ، ربما يجب أن ترمي استثناء مناسب.

كلمة تحذير على الرغم من. إذا كنت تتوقع مستخدمي طلبك لتوفير القيم غير الصحيحة بشكل متكرر، فإن الاستثناء هو فكرة سيئة. تعامل الاستثناء في الهدف - 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;
}

تعديل: هنا آخر حتى السؤال يدخل بالتفصيل حول التعامل مع الاستثناء في الهدف - ج.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top