我想了解构建应用架构的正确方法。我读了很多。我正面临着两种不同的方法。而且,每种方法的普及程度似乎都是五十。
第一个-使用ViewController或TableViewController中的数据配置单元格
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! TableViewCell
cell.title.text = "Some text"
// config other data...
return cell
}
第二个-通过协议配置单元格
protocol SomeCellProtocol {
func setTitle(text: String)
}
class SomeCell: UITableViewCell {
@IBOutlet weak var title: UILabel!
}
extension SomeCell: SomeCellProtocol {
func setTitle(text: String) {
title.text = text
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: identifier, for: indexPath) as! TableViewCell
cell.setTitle(text: "Some text")
// config other data...
}
所以问题是:
答案 0 :(得分:3)
它们的工作原理相同,但是在protocol
1-重用其他单元格。
2-全部cellForRowAt
。
3-将来,当您直接使用函数而不是直接访问@IBOutlets
并直接对其进行编辑时,速度会稍有加快,这将使错误率降至最低,因为您仅限于protocol
。
4-您可以使用它而无需完全创建单元格,这非常有用,当您只想在UIViewController
中真正快速地创建所有内容然后创建自定义单元格时。
问题2:
将数据传递到单元格非常适合使用干净的代码,因为您可以创建尽可能多的多态函数来将数据直接处理到单元格中,而不是在if else
内手动func cellForRowAt
进行处理。
例如:
protocol configurable {
func configure(dataForm: SomeObject)
func configure(dataForm: SomeOtherObject)
}
问题3:
被动视图。屏幕和具有所有特定于应用程序行为的组件被提取到控制器中,从而使小部件的状态完全由控制器控制。
他们都是被动的。
答案 1 :(得分:1)
关于问题2:
我相信,如果我们继续使用协议而不是要传输的对象,那么我们可以改进版本“通过协议配置单元”。
from operator import truth
t = list(filter(truth, (manhattan(listA, i) for i in listB)))
然后我们使用protocol DataForCellProtocol {
func getTitle()->String?
func getDescription()->String?
...
}
创建CellConfigureProtocol
:
DataFromCellProtocol
现在要为任何数据构建一个单元,您只需要为它们实现protocol CellConfigureProtocol{
func configureCell(with obj: DataForCellProtocol)
}
。现在我们可以确定我们拥有被动视图。