方法 Swizzling 以保持更清晰的 Class 实现
Method Swizzling to keep a cleaner Class implementation
我的应用程序的其中一个 viewController 变得非常大,特别是因为我添加了一个 "Tutorial state",它为这个 [=17= 的许多方法添加了不同的实现] 我通过检查
来控制
_tutorialEnabled?
所以,我的问题是,如果这是方法调配的一个很好的用例,我可以将这些方法的不同实现放在一个单独的类别中,并在需要时调配它们,这可能会帮助我减少代码量默认实现。对其他技术的任何意见或建议表示赞赏。
不,这不是 method swizzling 的设计目的。
就我个人而言,我会创建一个视图控制器的子类来管理与教程相关的内容。然后,根据教程是否启用,您可以实例化教程控制器或其超类。这就是多态性的设计目的:避免无穷无尽的 if
/else
/switch
es.
你为什么不子类化?使用所有需要的逻辑创建视图控制器的教程子类。使用没有动画的全屏模式在真实视图控制器 -viewDidAppear:
中展示教程。当教程结束时,关闭没有动画的模型。
if _tutorialEnabled != nil && _tutorialEnabled {
tutorialViewController = …
tutorialViewController.modalPresentationStyle = .FullScreen
presentViewController(tutorialViewController, animated: NO) {}
}
不,我不会为此使用方法调配。这有点像用大锤敲图钉。
与其他人不同,我也不会子类化视图控制器,当您想稍后添加其他功能时,围绕视图生命周期事件保持可理解的流程非常重要。
相反,我会为此使用 strategy pattern。在你的 init 中你可以做这样的事情:
if (tutorialEnabled) {
self.behaviour = [TutorialBehaviour new];
} else {
self.behaviour = [NormalBehaviour new];
}
然后,当您需要做一些改变时,您只需对您的行为调用一个方法,例如。
- (void)viewDidLoad
{
...
[self.behaviour load]
...
}
我的应用程序的其中一个 viewController 变得非常大,特别是因为我添加了一个 "Tutorial state",它为这个 [=17= 的许多方法添加了不同的实现] 我通过检查
来控制_tutorialEnabled?
所以,我的问题是,如果这是方法调配的一个很好的用例,我可以将这些方法的不同实现放在一个单独的类别中,并在需要时调配它们,这可能会帮助我减少代码量默认实现。对其他技术的任何意见或建议表示赞赏。
不,这不是 method swizzling 的设计目的。
就我个人而言,我会创建一个视图控制器的子类来管理与教程相关的内容。然后,根据教程是否启用,您可以实例化教程控制器或其超类。这就是多态性的设计目的:避免无穷无尽的 if
/else
/switch
es.
你为什么不子类化?使用所有需要的逻辑创建视图控制器的教程子类。使用没有动画的全屏模式在真实视图控制器 -viewDidAppear:
中展示教程。当教程结束时,关闭没有动画的模型。
if _tutorialEnabled != nil && _tutorialEnabled {
tutorialViewController = …
tutorialViewController.modalPresentationStyle = .FullScreen
presentViewController(tutorialViewController, animated: NO) {}
}
不,我不会为此使用方法调配。这有点像用大锤敲图钉。
与其他人不同,我也不会子类化视图控制器,当您想稍后添加其他功能时,围绕视图生命周期事件保持可理解的流程非常重要。
相反,我会为此使用 strategy pattern。在你的 init 中你可以做这样的事情:
if (tutorialEnabled) {
self.behaviour = [TutorialBehaviour new];
} else {
self.behaviour = [NormalBehaviour new];
}
然后,当您需要做一些改变时,您只需对您的行为调用一个方法,例如。
- (void)viewDidLoad
{
...
[self.behaviour load]
...
}