Я искал ответ в stackoverflow и Google также, но не получил то, в чем я нуждаюсь.
Что я ищу:
там какой-либо путь состоит в том, чтобы установить значения по умолчанию для свойств класса класса? Как то, что мы можем сделать в Java в конструкторе класса, например, -
MyClass(int a, String str){//constructor
this.a = a;
this.str = str;
// i am loking for similar way in obj-C as follows
this.x = a*5;
this.y = 'nothing';
}
Почему я ищу:
У меня есть класс приблизительно с 15 свойствами. Когда я инстанцирую класса, я должен установить все они переменная/свойства с некоторыми значениями по умолчанию. Таким образом, это делает мой код тяжелым также комплекс. Если я мог бы установить некоторые значения по умолчанию на те переменные экземпляра из того класса, который должен уменьшить эту сложность/дублирование кода.
Мне нужна Ваша помощь.
Заранее спасибо за Вашу справку.
- Sadat
Запишите init, который выполняет всю работу по полной инициализации.
Затем просто напишите столько инициаторов с разными наборами параметров, сколько вам нужно (но подумайте: вам действительно нужен этот или тот ?). Нет, не позволяй им делать эту работу. Разрешите им заполнить все значения по умолчанию (те, которые вы не указываете в сообщении , , в , это реализация обработки сообщений) и передать все первому.
Этот первый инициатор называется назначенным инициатором. И не пропустите Множественные инициализаторы и назначенный инициализатор. Никогда не игнорируйте назначенного!
Приветствую
Если вы не хотите указывать параметры,
- (MyClass *)init {
if (self = [super init]) {
a = 4;
str = @"test";
}
return self;
}
то когда вы делаете MyClass *instance = [[MyClass alloc] init]
, он установит значения по умолчанию для ivars.
Но я не понимаю, почему вы опубликовали конструктор с параметрами, но не хотите их использовать.
В интерфейсе класса:
@interface YourClass : NSObject {
NSInteger a;
NSInteger x;
NSString *str;
NSString *y;
}
- (id)initWithInteger:(NSInteger)someInteger string:(NSString *)someString;
@end
Затем в реализации:
- (id)initWithInteger:(NSInteger)someInteger string:(NSString *)someString {
if (self = [super init]) {
a = someInteger;
str = [someString copy];
x = a * 5;
y = [@"nothing" retain];
}
return self;
}
( NSInteger
- это определение типа для int
или long
, в зависимости от архитектуры.)