我想创建一个对象,但是类型取决于if条件的结果:

if ([type isEqualToString:@"day"]) {
    GraphDayView *graphv = [[GraphDayView alloc] initWithFrame:rect];
} else {
    GraphMonthView *graphv = [[GraphMonthView alloc] initWithFrame:rect];
}


问题是graphv不在范围内,因此在if语句后我无法使用它。
因此,我尝试将其声明为ID:

id graphv;

if ([type isEqualToString:@"day"]) {
    graphv = [[GraphDayView alloc] initWithFrame:rect];
} else {
    graphv = [[GraphMonthView alloc] initWithFrame:rect];
}


但是现在的问题是,编译器不知道对象grapv是什么类型。所以:

graphv.backgroundColor = [UIColor whiteColor];


给出一个错误。有人知道如何解决这个问题吗?

最佳答案

如果它们共享相同的超类,则使用该超类代替id。否则,创建两个变量并将它们设置为nil:

GraphDayView *gdv = nil;
GraphMonthView *gmv = nil;


然后在if语句之后进行测试,以查看哪个已初始化。

关于objective-c - 在if条件中初始化对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9750506/

10-12 00:24