0

我处于我的应用程序的一个视图控制器变得非常大的情况下,特别是因为我添加了一个“教程状态”,它为我通过检查控制的此类的许多方法添加了不同的实现

_tutorialEnabled?

所以,我的问题是,如果这是一个很好的方法调配用例,我可以将这些方法的不同实现放在一个单独的类别中,并在需要时调配它们,这可能有助于我减少默认实现的代码量。对其他技术的任何意见或建议表示赞赏。

4

3 回答 3

1

不,这不是 swizzling 的设计目的。

我个人会创建一个管理教程相关内容的视图控制器的子类。然后,根据是否启用教程,实例化教程控制器或其超类。这就是多态性的设计目的:避免无穷无尽的// ifes 。elseswitch

于 2015-06-12T09:55:40.453 回答
1

你为什么不子类?使用所有需要的逻辑创建视图控制器的教程子类。-viewDidAppear:使用没有动画的全屏模式在真实视图控制器中展示教程。当教程结束时关闭没有动画的模型。

if _tutorialEnabled != nil && _tutorialEnabled {
    tutorialViewController = …
    tutorialViewController.modalPresentationStyle = .FullScreen
    presentViewController(tutorialViewController, animated: NO) {}
}
于 2015-06-12T10:03:27.110 回答
0

不,我不会为此使用方法调配。这有点像用大锤敲入图钉。

与其他人不同,我也不会子类化视图控制器,当您想稍后添加其他功能时,围绕视图生命周期事件维护可理解的流程非常重要。

相反,我会为此使用策略模式。在您的初始化中,您可以执行以下操作:

if (tutorialEnabled) {
    self.behaviour = [TutorialBehaviour new];
} else {
    self.behaviour = [NormalBehaviour new];
}

然后,当您需要做一些改变时,您只需调用您的行为的方法,例如。

- (void)viewDidLoad
{
    ...
    [self.behaviour load]
    ...
}
于 2015-06-12T10:23:38.133 回答