Přepsáním metodu setr, a dostat informace ven

hlasů
7

Mám metodu setr (setMinimumNumberOfSides), které chci přepsat po použití syntetizovat. V něm dávám do omezení na proměnné instance, aby se ujistil int je v určitých mezích.

Později ve způsobu vlastního init, jsem nastavit další instanci proměnné (numberOfSides), ale musím se ujistit, že minimumNumberOfSides a maximumNumberOfSides byla správně nastavena v rozumných mezích. Zkoušel jsem měnit návratovou hodnotu na setra k BOOL, takže jsem mohl projít zpět ano nebo ne, pokud uspěl / neuspěl, ale vytvořila konfliktní způsob, Hádám, protože jsem pomocí syntetizovat a přepsáním seřizovač.

Jak mohu získat informace ven snadno zkontrolovat, zda je seřizovač byla volána a úspěšně se vrátil?

-(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;
}
Položena 13/04/2009 v 21:04
zdroj uživatelem
V jiných jazycích...                            


2 odpovědí

hlasů
7

Nemusíte syntetizovat numberOfSides, pokud se chystáte na realizaci kariérista a setter. Bez @synthesize numberOfSidesmůžete vrátit BOOL, pokud si vyberete. Budete muset odpovídajícím způsobem deklarovat getter / seřizovač ve svém rozhraní.

Mimochodem, jiný přístup by bylo použít syntetizovanou getrové / seřizovač a přidat samostatný způsob -(BOOL)isNumberOfSidesValid, který provádí tuto kontrolu.

Odpovězeno 13/04/2009 v 21:18
zdroj uživatelem

hlasů
3

V situaci jako je tato, může být lepší vypnout pomocí jednoduchého volání assert(), nebo házet výjimku.

Volba bude záviset na tom, jak vidíte používá tuto třídu. Pokud to bude součástí knihovny, a můžete očekávat další vývojáři často dodat nesprávné hodnoty minimumNumberOfSidesnebo maximumNumberOfSides, asi byste měli hodit správné výjimku.

Slovo varování, ačkoli. Pokud očekáváte, že uživatelé aplikace často dodat nesprávné hodnoty, pak výjimka je špatný nápad. Zpracování výjimek v Objective-C je nákladné operace. Pokud se tyto kontroly jsou zavedeny v zájmu uživatele, je třeba provést ověření vstupu, a hlášení chyb pro uživatele mnohem více vstřícným způsobem.

edit: Tady je nějaký rychlý ukázkový kód:

-(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;
}

edit: Zde je další SO otázka, která jde do podrobností o zpracování výjimek v Objective-C.

Odpovězeno 13/04/2009 v 21:31
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more