Swift 配置视图中的 VIPER 设计模式

VIPER design pattern in Swift configuring view

我最近迁移到 VIPER,在使用这种类型的架构时提出了这样的问题:

例如,我的设计长(2000pt 高)UI 有超过 50 个界面元素,如标签、按钮、视图、集合等,我需要为它们添加圆角和阴影。

我应该在哪里配置它的外观?它应该在 View 中,还是在 Presenter 中?

到目前为止,我已经扩展了 UIView 来创建一个投影方法。

现在,我在视图模块中的内容是:

 override func viewDidLayoutSubviews() {
    doctorsNearCollection.backgroundColor = UIColor(white: 1, alpha: 0)
    newsMayBeInterestedCollection.backgroundColor = UIColor(white: 1, alpha: 0)
    recentSavedNewsCollection.backgroundColor = UIColor(white: 1, alpha: 0)
    setupCharts()
    
    scheduleMetting.dropShadow()
    scheduleMetting.layer.cornerRadius = 5
    
    monthlyPerformaceBackground.dropShadow()
    monthlyPerformaceBackground.layer.cornerRadius = 5
    
    firstMeeting.dropShadow()
    firstMeeting.layer.cornerRadius = 5
    firstMeetingNumber.layer.cornerRadius = self.firstMeetingNumber.frame.size.width / 2
    
    secondMeeting.dropShadow()
    secondMeeting.layer.cornerRadius = 5
    secondMeetingNumber.layer.cornerRadius = self.secondMeetingNumber.frame.size.width / 2
    
    thirdMeeting.dropShadow()
    thirdMeeting.layer.cornerRadius = 5
    thirdMeetingNumber.layer.cornerRadius = self.thirdMeetingNumber.frame.size.width / 2
    
    seeAllMeetings.dropShadow()
    seeAllMeetings.layer.cornerRadius = 5
    
    searchForDoctors.dropShadow()
    searchForDoctors.layer.cornerRadius = 5
    
    seeAllSavedNews.dropShadow()
    seeAllSavedNews.layer.cornerRadius = 5
}

这是一个好习惯吗? 我有兴趣在从其他方法中提取出来的视图外观之间建立共性。这对我来说似乎或多或少是清楚的。 提前致谢。

  • https://TheSwiftDev.com/the-ultimate-viper-architecture-tutorial 中所述,UI 细节和构造必须隔离在视图区中,并且永远不会出现在演示区中,因为视图区 handles/quarantines 所有 UI details/concepts 作为内部事务,而演示者区域 handles/quarantines 所有纯应用程序域 details/concepts 作为内部事务。
  • 本着永不言败的精神,UI 元素的“圆角和阴影”唯一出现在演示区的情况是 app-domain 应用程序本身就是一个 UI-generator 或 UI-editor 或 UI-designer 工具,其中一些下游(-app's)UI (即,不是 this 应用程序的 UI)是此应用程序的应用程序域。因此,除非您的应用程序是用于 UI 开发的 UI 设计环境,否则 UI 东西永远不会超出视图区域(即使是其他应用程序的 UI 例外情况)东西,不是当前应用程序的 UI 东西)。
  • 仅仅因为一些以 UI 为中心的代码需要作为视图之间的共性而被分解出来,这并不意味着它会得到 VIPER 处理以闯入其他 4 个区域 {interactor、presenter、entities , router} 作为表达共性的一种方式。视区本身可以有层。其中一个层是 2 个或更多视图之间的通用基础结构库。 (另一个这样的层可能是一个外观,它将以 UI 为中心的事件转换为以应用程序域为中心的事件,这些事件将跨区域传递给演示者来处理,而不是作为以 UI 为中心的事件,而是作为一个应用程序-域事件独立于它在 UI 中的表示方式。)如果需要将某些函数、方法、过程、子例程或协程分解为视图区域中多个视图之间的共性,则保留分解出的函数、方法、过程、子例程或协程在视图区内的库中,而不是任何其他 IPER 区。