Estoy haciendo una aplicación, y tengo una clase con muchas propiedades y me preguntaba si era posible darles un valor predeterminado. Porque si hago un método init, que es un montón de trabajo para escribir todo, hay una gran posibilidad de error tipográfico y es simplemente no es agradable codificación ...Objective-C establece el valor predeterminado para una propiedad
Este es el aspecto de mi clase como:
// 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;
Así pues, en la implementación, lo estoy haciendo algo como:
@synthesize aerialAbility = _aerialAbility;
y me preguntaba si sería posible hacer esto:
@interface MyClass : NSObject
@property (nonatomic) int someProperty;
@end
@implementation MyClass
@synthesize someProperty = _someProperty = 10;
@end
Sé que esto no funcionará, y esto no funciona en absoluto, pero me preguntaba si hay alguna manera de hacer algo como esto.
Al igual que en Java se puede:
class MyClass
{
private int someProperty = 10;
public int getSomeProperty(){return someProperty;}
public void setSomeProperty(int someProperty){this.someProperty = someProperty;}
}
Así es - el inicializador es una multa lugar para configurar el valor inicial para un ivar o propiedad. Más específicamente, el inicializador designado (el inicializador que llamará cualquier otro inicializador para la clase) es aquel en el que debe configurar esos valores. – Caleb
Gracias por las sugerencias, sin embargo, trato de evitar poner más de 30 tareas en el inicializador, y la clase no puede dividirse (por supuesto, siempre puede, pero solo empeoraría el diseño de mi clase)) –
por qué querría evitar eso que no entiendo. El init está hecho para este propósito, o puedes usar un Dictionary que deberías configurar en el init de todos modos ... – chikuba