如何在构造函数中初始化Objective C结构?

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,它对于在其中包含对象指针的结构不能很好地工作.在这种情况下的建议是只使用类而不是结构.


man*_*van 5

您可以使用默认设置的静态对象按如下方式初始化结构。

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)