В цели c, действительно ли возможно установить значение по умолчанию для переменной класса?

Я искал ответ в 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

5
задан Sadat 19 July 2010 в 12:03
поделиться

3 ответа

Запишите init, который выполняет всю работу по полной инициализации.

Затем просто напишите столько инициаторов с разными наборами параметров, сколько вам нужно (но подумайте: вам действительно нужен этот или тот ?). Нет, не позволяй им делать эту работу. Разрешите им заполнить все значения по умолчанию (те, которые вы не указываете в сообщении , , в , это реализация обработки сообщений) и передать все первому.

Этот первый инициатор называется назначенным инициатором. И не пропустите Множественные инициализаторы и назначенный инициализатор. Никогда не игнорируйте назначенного!

Приветствую

3
ответ дан 14 December 2019 в 04:29
поделиться

Если вы не хотите указывать параметры,

- (MyClass *)init {
    if (self = [super init]) {
        a = 4;
        str = @"test";
    }
    return self;
}

то когда вы делаете MyClass *instance = [[MyClass alloc] init], он установит значения по умолчанию для ivars.

Но я не понимаю, почему вы опубликовали конструктор с параметрами, но не хотите их использовать.

4
ответ дан 14 December 2019 в 04:29
поделиться

В интерфейсе класса:

@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 , в зависимости от архитектуры.)

1
ответ дан 14 December 2019 в 04:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: