如果只给出超类对象,如何访问子类对象属性

时间:2015-05-12 03:05:25

标签: ios objective-c

我有一个超类作为ChartModel,以及ChartModel中的子类,其中有一个名为LineChartModel的模型,并且具有属性categoryType

现在我有一个方法接受一个参数as(DataModel *),如:

- (void) showChartWithModel:(ChartModel *)dataModel {
    if ([dataModel respondsToSelector:@selector(categoryType)]) {
        if ([dataModel categoryType] == CategoryTypeDate) { // compiler error

        }
    }
}

现在编译器抱怨[dataModel categoryType],因为categoryType中没有定义ChartModel。我不要希望将categoryType放入super class,因为不是每张图都有这样的属性。如何解决这个问题?感谢。

1 个答案:

答案 0 :(得分:0)

您可以将dataModel投射到id

- (void) showChartWithModel:(ChartModel *)dataModel {
    if ([dataModel respondsToSelector:@selector(categoryType)]) {
        if ([(id)dataModel categoryType] == CategoryTypeDate) { // compiler error

        }
    }
}

或者您可以将其投放到LineChartModel,在这种情况下我会测试它:

- (void) showChartWithModel:(ChartModel *)dataModel {
    if ([dataModel isKindOfClass:[LineChartModel class]]) {
        if ([(LineChartModel *)dataModel categoryType] == CategoryTypeDate) { // compiler error

        }
    }
}