ios - 如何在视图之间传递数据。我什么时候应该使用什么?
问题描述
我有一个像这样的视图层次结构:
- UIViewController ( SingleEventViewController )
- UIScrollView (事件滚动视图)
- 界面视图(内容视图)
- 3xUITableView(SurePeopleTV、MaybePeopleTV、NopePeopleTV(都继承自同一个 UITableView))和所有其他 UI 元素
SingleEventViewController 存储一个事件(在初始化程序中传递)。(所有事件都存储在核心数据中)。
这三个UITableViews
用于显示参与(或不参与或可能参与)活动的用户。我的问题是,用数据填充 tableViews 的可能性是什么,在这种情况下你会推荐什么。
目前我parentVC: SingleEventViewController
在所有子视图中都有一个属性并获取如下数据:
override func loadUsers() {
//class SurePeopleTV
guard let parentController = parentVC else { return }
users = (parentController.thisEvent.eventSureParticipants?.allObjects as! [User])
finishedLoading = true
super.loadUsers()
}
.
func applyDefaultValues() {
//class EventScrollView
guard let parent = parentVC else { return }
titleLabel.text = parent.eventName
}
我是编程新手,但我觉得我不应该在我的所有类中创建 parentVC 引用。
解决方案
一个对象不应该(理想情况下)知道它的父对象——如果知道的话,它们是“紧密耦合的”。如果您更改对象的父对象,您的代码可能会中断。在您的情况下,您的父对象必须具有thisEvent
属性。
您希望您的对象“松散耦合”,因此该对象不知道特定的父对象。
在 Swift 中,传递信息“备份链”的常用方法是使用委托设计模式…… <a href="https://developer.apple.com/documentation/swift/cocoa_design_patterns" rel="nofollow noreferrer" >https://developer.apple.com/documentation/swift/cocoa_design_patterns 或使用闭包。
有关委托的信息,另请参见https://www.andrewcbancroft.com/2015/04/08/how-delegation-works-a-swift-developer-guide/
推荐阅读
- c# - Hangfire 排队错过的时间表
- mysql - Symfony2 在 Symfony 和 csv 文件中添加查询日志
- postgresql - 如何在尝试启动 pgsql 容器时修复“无法启动服务 pgsql:b'OCI 运行时创建失败:”?
- swift - 如何从快照闭包中返回 Array 的值并将其用于为 segue 做准备?
- node.js - 节点快递,res.send 内存溢出
- php - Symfony - 查找最后创建的实体
- javascript - 从图像轮播中删除过渡
- go - Prometheus Exporter - 直接检测与自定义收集器
- javascript - 在 react-virtualized 中的表数据后添加自定义行
- python - 如何将运行总计相加?