Как инициализировать конструктор Objective C в конструкторе?
Я использую структуру Objective C для хранения некоторых данных, примерно так:
@interface Interface : NSObject
{
// my Data
struct Data
{
__unsafe_unretained BOOL isInit;
__unsafe_unretained BOOL isRegister;
__unsafe_unretained NSString* myValue;
// Data() : isInit(false), isRegister(false), myValue(@"mYv4lue") {} // Constructor doesnt work
};
struct Data myData; // Create Struct
}
Но я не могу скомпилировать конструктор. Я хочу, чтобы значения принимали какое-то значение по умолчанию при создании Struct.
Как я могу это сделать?
Ответы
Ответ 1
В структурах нет инициализаторов, если вы хотите создать структуру с определенным набором значений, вы могли бы написать функцию, которая возвращает создает и инициализирует ее для вас:
Например
struct Data {
BOOL isInit;
BOOL isRegister;
NSString* myValue;
};
Data MakeInitialData () {
data Data;
data.isInit = NO;
data.isRegister = NO;
data.myValue = @"mYv4lue";
return data;
}
теперь вы можете получить правильно настроенную структуру с помощью:
Data newData = MakeInitialData();
Заметка, однако; вы, кажется, используете ARC, что плохо работает с структурами, в которых есть указатели объектов. Рекомендация в этом случае - просто использовать класс вместо структуры.
Ответ 2
Вы также можете сделать так:
@interface Interface : NSObject
{
typedef struct tagData
{
__unsafe_unretained BOOL isInit;
__unsafe_unretained BOOL isRegister;
__unsafe_unretained NSString* myValue;
tagData(){
isInit = NO;
isRegister = NO;
myValue = NULL;
}
} myData;
}
Ответ 3
Пространство, в котором вы делаете это - между фигурными фигурными скобками в начале блока @interface
- не позволяет запускать код. Это исключительно для деклараций иваров. Вы действительно даже не должны объявлять struct
там (я удивлен, что компилируется).
Переместите вызов конструктора методу класса init
. То, где предполагается инициализация иваров в ObjC.
Ответ 4
Вы можете инициализировать структуру следующим образом, используя статический объект для настроек по умолчанию.
typedef struct
{
BOOL isInit;
BOOL isRegister;
__unsafe_unretained NSString* myValue;
} Data;
static Data dataInit = { .isInit = NO, .isRegister = NO, .myValue = @"mYv4lue"};
Data myCopyOfDataInitialized = dataInit;