声明typedef struct变量

时间:2014-12-28 05:19:40

标签: ios objective-c variables types

我的.h文件中有这个typedef

    typedef struct
{
    NSInteger openTime;
    NSInteger closeTime;
    } ShopHours;

现在我想在我的.m文件中声明它,然后就像你想在整个.m中使用的NSString一样。

所以基本上我想初始化它,作为typedef的数组然后我可以在我的viewDidLoad方法中为它分配一个vaule,我觉得合适。

所以基本上我想声明它像

ShopHours weekSchedule[] = {};

然后在viewDidLoad

weekSchedule[] = {//my data}

但是当我尝试声明并使用它时,我得到了编译错误

Field has incomplete type 'SHopHours[]'

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

编译器需要知道weekSchedule变量有多大,以便为它放置一些内存。你可以将它声明为shopHours weekSchedule [7]。

答案 1 :(得分:0)

我试过,问题是你需要首先取消数组的大小:

@interface LoginScreen (){
    ShopHours aa[5];
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    for (int i = 0; i < 5; i++) {
        aa[i].closeTime = 5+i;
        aa[i].openTime = 10 + i;
    }
}

在我记录的另一种方法中:

for (int i = 0; i < 5; i++) {
    NSLog(@"Open Time %ld\n",(long)aa[i].openTime);
    NSLog(@"Close Time %ld\n",(long)aa[i].closeTime);
}

工作得很好。

如果你想要动态内存分配,你可以这样做

@interface LoginScreen (){
    ShopHours *aa;
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    aa = malloc(sizeof(ShopHours) * 5);
    for (int i = 0; i < 5; i++) {
        aa[i].closeTime = 5+i;
        aa[i].openTime = 10 + i;
    }
}

希望这有助于......:)