目前我们有类似......的课程结构。
GenericFruitViewController
- AppleViewController
- PearViewController
- StrawberryViewController
特定视图控制器是子类,只改变少量实现。
我想做的是能够在运行时换出GenericViewController
。我想改变通用视图控制器的工作方式并改变一些方法(这不会影响子类化的重写方法)。
但我希望能够打开/关闭此功能(A / B测试)。
目前我们有一个像......一样的工厂方法
- (GenericFruitViewController *)fruitControllerWithType:(FruitType)type
{
if (type == Apple) {
return [AppleViewController new];
}
return [GenericFruitViewController new];
}
我想做的事情(理想情况)就像......
- (GenericFruitViewController *)fruitControllerWithType:(FruitType)type
{
// this is the new bit!
if (switchOnTheTesting) {
// swap GenericFruitViewController for my NewFruitViewController
}
// new bit ends
// existing code not changed
if (type == Apple) {
// this now returns a subclass of NewFruitVC if switched
return [AppleViewController new];
}
// this now returns NewFruitVC if switched
return [GenericFruitViewController new];
}
通过执行此操作,只要它引用GenericFruitVC
,就会使用我的新VC。
这甚至可能吗?