我有一个 View 模型,其中包含我的模型和我的 View Controller 中的 TableView 委托(delegate)方法使用的其他属性。对于 heightForRowAt 委托(delegate)方法,我从我的 View 模型中传递一个计算属性来动态计算行的高度。我的问题是行高属性是否属于我的 View 模型?如果它只是一个常量而不是计算属性怎么办?如果不是,为什么?我应该把它放在另一个结构中吗?
最佳答案
你可以把它放进去。 MVVM 有不同的变体。
放在 View 层: 如果你更喜欢 View 模型而不是对 View 有任何了解,那么你可以将高度计算放在你的 View 模型中,因为它是纯粹的渲染逻辑。在这种情况下, View 模型与 View 很好地解耦,您可以使用不同的 View 来呈现相同的 View 模型。 View 模型中的属性应该与 View 无关,例如,您的 View 中有一个名称标签, View 模型属性应该称为
name
而不是nameLabelText
。这种实现有两个缺点。首先,如果你想缓存计算出的高度,那么你必须在你的 View 层中实现缓存。第二个是在渲染之前计算单元格高度并不容易。将其放入 View 模型中: 在实践中,我发现让你的 View 模型对 View 有一些了解是可以接受的,因为在大多数情况下,一个 View 模型只被一个 View 使用。在这种情况下,您可以根据需要调用 View 模型属性
nameLabelText
,也可以使用cellHeight
。缓存单元格高度和异步进行高度计算也将更加容易。
关于ios - 对于 MVVM 设计模式, TableView 单元格高度属于哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51711286/