gpt4 book ai didi

ios - 如何定义可以从两个不同的类初始化的变量?

转载 作者:行者123 更新时间:2023-12-01 17:53:41 25 4
gpt4 key购买 nike

抱歉,问题标题含糊不清,但我发现自己很难直截了当。

这里的问题是,我可能要初始化和加载两个不同的数据源。根据数据更改,我需要哪个数据源。

我遇到的问题是,当它可能来自两个不同的类时,如何定义该dataSource的变量。

如果我在界面中定义它们:

BColumnChartDataSource * chartDatasource = [[BColumnChartDataSource alloc] initWithExercise:_exercise];
BDoubleColumnChartDataSource * chartDatasource = [[BDoubleColumnChartDataSource alloc] initWithExercise:_exercise];

那么显然他们不喜欢他们被称为同一件事。

如果我尝试将它们放在if语句中,则它们在逻辑语句之外不可用
if (_exercise.unitTypeLinks.count < 2) {
BColumnChartDataSource * chartDatasource = [[BColumnChartDataSource alloc] initWithExercise:_exercise];
}
else {
BDoubleColumnChartDataSource * chartDatasource = [[BDoubleColumnChartDataSource alloc] initWithExercise:_exercise];
}

最终,我想将它们放入这样的语句中,以便可以将if语句放入其中的每个语句中,但这是一种非常冗长的方法,如果我添加更多的dataSources,可能会花费更多的时间。
// Get the exercise event list for our clicked exercise
_exerciseEventList = [chartDatasource getExerciseEventList];

我想我在这里肯定会遗漏一些明显的东西,所以谢谢您能提供的任何帮助

最佳答案

您应该创建一个创建基类,并使用基类继承这两个类。

@interface BDataSource : NSObject
@end

@interface BColumnChartDataSource : BDataSource
//your custom implementation here
@end

@interface BDoubleColumnChartDataSource : BDataSource
//your custom implementation here
@end

之后,您可以像这样初始化您的数据源
BDataSource *dataSource = nil;

if (_exercise.unitTypeLinks.count < 2) {
dataSource = [[BColumnChartDataSource alloc] initWithExercise:_exercise];
}
else {
dataSource = [[BDoubleColumnChartDataSource alloc] initWithExercise:_exercise];
}

关于ios - 如何定义可以从两个不同的类初始化的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22059084/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com