vgo*_*anz 11 constructor struct 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时值会采用一些默认值.
我怎样才能做到这一点?
Abi*_*ern 21
结构没有初始化器,如果要创建具有特定值集的结构,可以编写一个返回创建并为其初始化的函数:
例如
struct Data {
BOOL isInit;
BOOL isRegister;
NSString* myValue;
};
Data MakeInitialData () {
data Data;
data.isInit = NO;
data.isRegister = NO;
data.myValue = @"mYv4lue";
return data;
}
Run Code Online (Sandbox Code Playgroud)
现在你可以得到一个正确设置的结构:
Data newData = MakeInitialData();
Run Code Online (Sandbox Code Playgroud)
但是要注意; 你似乎在使用ARC,它对于在其中包含对象指针的结构不能很好地工作.在这种情况下的建议是只使用类而不是结构.
您可以使用默认设置的静态对象按如下方式初始化结构。
typedef struct
{
BOOL isInit;
BOOL isRegister;
__unsafe_unretained NSString* myValue;
} Data;
static Data dataInit = { .isInit = NO, .isRegister = NO, .myValue = @"mYv4lue"};
Data myCopyOfDataInitialized = dataInit;
Run Code Online (Sandbox Code Playgroud)