I'm使用的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 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,不与那些在他们的对象指针结构很好地工作。 在这种情况下,建议是只使用,而不是一个结构的类。
你也可以做到这一点的方法:
@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;
}
在类年代初花括号之间-在你这样做的空间@interface
块-不允许运行的代码。 它是专为高德的声明。 你真的不应该甚至宣称struct
中有S(我很惊讶,编译)。
移动构造函数调用到您的类的init
方法。 这就是高德的初始化应该在ObjC发生。
你可以使用静态对象的默认设置如下初始化一个结构。
typedef struct
{
BOOL isInit;
BOOL isRegister;
__unsafe_unretained NSString* myValue;
} Data;
static Data dataInit = { .isInit = NO, .isRegister = NO, .myValue = @"mYv4lue"};
Data myCopyOfDataInitialized = dataInit;