В цели c можно ли установить значение по умолчанию для переменной класса? - PullRequest
5 голосов
/ 19 июля 2010

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

Ответы [ 3 ]

4 голосов
/ 19 июля 2010

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

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

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

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

3 голосов
/ 20 июля 2010

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

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

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

Привет

1 голос
/ 19 июля 2010

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

@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 - это typedef для int или long, в зависимости от архитектуры.)

...