从海量视图控制器中重构 Swift UIViewPropertyAnimators

Posted

技术标签:

【中文标题】从海量视图控制器中重构 Swift UIViewPropertyAnimators【英文标题】:Refactoring Swift UIViewPropertyAnimators out of massive view controller 【发布时间】:2018-11-12 21:55:49 【问题描述】:

我正在尝试重构我现在有 >900 行(太多)的 Swift 大型视图控制器。

如何将我的UIViewPropertyAnimators(约100 行)的创建与我的主要UIViewController 分开? 问题是UIViewPropertyAnimators 需要引用view 属性和UIViews 他们正在制作动画。我是否创建一个带有weak varstruct,通过依赖注入将view 引用分配给它?我还需要以某种方式引用UIView 对象。 不确定在不产生循环的情况下重构它的最佳方法是什么。有什么想法吗?

加法

由于所有动画师只与窗口的一部分相关,我现在创建了一个子视图控制器并将动画师移动到那里。我认为这也是一个可行的解决方案。我不得不添加委托模式。最后,父视图控制器缩短了约 100 行,正如他们所说,我有“分离的关注”。

【问题讨论】:

你可以为 uiview 创建扩展,我认为 UIViewPropertyAnimators 不是唯一的问题。了解 MVVM 将您的UIViewPropertyAnimators 放在一个单独的文件中,然后在该文件中创建一个协议并通过定义UIViewController 类型的delegate 来访问您的view 属性 【参考方案1】:

例如:

名为 PropertyAnimators 的新文件

在该文件中导入您需要的所有库。然后像这样扩展原始视图控制器:

extension UIViewControllerName: UIViewController, (any other delegates that you need) 
//PropertyAnimators code

【讨论】:

以上是关于从海量视图控制器中重构 Swift UIViewPropertyAnimators的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 从完成块中解除视图控制器

如何从视图控制器发送数据以在 swift 5 中嵌入视图控制器?

如何从 Web 视图打开 Safari 视图控制器(swift)

从 Swift 3 中的另一个项目访问视图控制器

在 Swift 中 segue 后从堆栈中删除(删除)视图/视图控制器的正确方法

如何从 UICollectiveViewCell 类呈现视图控制器 - SWIFT