我遇到的情况是我的应用程序的一个viewControllers变得非常大,特别是因为我添加了一个“Tutorial state”,它通过检查<我控制的这个类的许多方法添加了不同的实现/ p>
_tutorialEnabled?
所以,我的问题是,如果这是方法调配的一个很好的用例,我可以将这些方法的不同实现放在一个单独的类别中,并在需要时调用它们,它可能会帮助我减少默认代码的数量实现。欢迎任何其他技术的意见或建议。
答案 0 :(得分:1)
不,这不是针对什么方法设计的。
就个人而言,我会创建一个视图控制器的子类来管理教程相关的东西。然后,根据是否启用了教程,您可以实例化教程控制器或其超类。这就是多态性的设计目的:避免无休止的if
/ else
/ switch
es。
答案 1 :(得分:1)
为什么不进行子类化?使用所有需要的逻辑创建视图控制器的教程子类。使用不带动画的全屏模式在真实视图控制器的-viewDidAppear:
中演示教程。当教程结束时,在没有动画的情况下关闭模型。
if _tutorialEnabled != nil && _tutorialEnabled {
tutorialViewController = …
tutorialViewController.modalPresentationStyle = .FullScreen
presentViewController(tutorialViewController, animated: NO) {}
}
答案 2 :(得分:0)
不,我不会为此使用方法调整。这有点像用大锤敲打图钉。
与其他人不同,我也不会将视图控制器子类化,如果您希望稍后添加其他功能,那么维护视图生命周期事件周围的可理解流程非常重要。
相反,我会使用strategy pattern。在你的init中你可以这样做:
if (tutorialEnabled) {
self.behaviour = [TutorialBehaviour new];
} else {
self.behaviour = [NormalBehaviour new];
}
然后,当你需要做一些改变的事情时,你只需要对你的行为调用一个方法,例如
- (void)viewDidLoad
{
...
[self.behaviour load]
...
}