Robię aplikację, a ja mam klasę z całkiem niezliczonymi właściwościami i zastanawiałem się, czy możliwe było nadanie im domyślnej wartości. Bo jeśli uczynić metodę init to dużo pracy, aby wpisać wszystko, istnieje duża szansa, literówka, a to jest po prostu nieładnie kodowanie ...Objective-C ustaw domyślną wartość dla właściwości
To jak wygląda moja klasa jak:
// Goalkeeping attributes
@property (nonatomic) int aerialAbility;
@property (nonatomic) int commandOfArea;
@property (nonatomic) int communication;
@property (nonatomic) int eccentricity;
@property (nonatomic) int handling;
@property (nonatomic) int kicking;
@property (nonatomic) int oneOnOnes;
@property (nonatomic) int reflexes;
@property (nonatomic) int rushingOut;
@property (nonatomic) int tendencyToPunch;
@property (nonatomic) int throwing;
// Technical attributes
@property (nonatomic) int corners;
@property (nonatomic) int crossing;
@property (nonatomic) int dribbling;
@property (nonatomic) int finishing;
@property (nonatomic) int firstTouch;
@property (nonatomic) int freeKickTaking;
@property (nonatomic) int heading;
@property (nonatomic) int longShots;
@property (nonatomic) int longThrows;
@property (nonatomic) int marking;
@property (nonatomic) int passing;
@property (nonatomic) int penaltyTaking;
@property (nonatomic) int tackling;
@property (nonatomic) int technique;
// Mental attributes
@property (nonatomic) int aggression;
@property (nonatomic) int anticipation;
@property (nonatomic) int bravery;
@property (nonatomic) int composure;
@property (nonatomic) int concentration;
@property (nonatomic) int creativity;
@property (nonatomic) int decisions;
@property (nonatomic) int determination;
@property (nonatomic) int flair;
@property (nonatomic) int influence;
@property (nonatomic) int offTheBall;
@property (nonatomic) int positioning;
@property (nonatomic) int teamwork;
@property (nonatomic) int workRate;
// Physical attributes
@property (nonatomic) int acceleration;
@property (nonatomic) int agility;
@property (nonatomic) int balance;
@property (nonatomic) int jumping;
@property (nonatomic) int naturalFitness;
@property (nonatomic) int pace;
@property (nonatomic) int stamina;
@property (nonatomic) int strength;
Tak więc, w realizacji, robię coś takiego:
@synthesize aerialAbility = _aerialAbility;
I zastanawiałem się, czy byłoby możliwe, aby to zrobić:
@interface MyClass : NSObject
@property (nonatomic) int someProperty;
@end
@implementation MyClass
@synthesize someProperty = _someProperty = 10;
@end
Wiem, że to nie zadziała, a to w ogóle nie pasuje, ale zastanawiałem się, czy istnieje sposób na zrobienie czegoś takiego.
Podobnie jak w Javie można:
class MyClass
{
private int someProperty = 10;
public int getSomeProperty(){return someProperty;}
public void setSomeProperty(int someProperty){this.someProperty = someProperty;}
}
To prawda - inicjatora jest w porządku miejsce do ustawienia wartości początkowej dla ivar lub własności. Dokładniej, wyznaczony inicjator (inicjator, który wywoła każdy inny inicjator klasy) jest tym, w którym powinieneś ustawić te wartości. – Caleb
Dziękuję za sugestie, jednak staram się unikać wprowadzania ponad 30 zadań w inicjalizatorze, a klasa naprawdę nie może być podzielona (oczywiście, zawsze może, ale to tylko pogorszyłoby mój projekt klasy). –
dlaczego chciałbym uniknąć tego, czego nie dostanę. Do tego celu służy init lub możesz użyć słownika, który i tak musiałbyś skonfigurować w init ... – chikuba