iOS MVP数据转换责任
假设我有一个带有iOS MVP数据转换责任,ios,swift,architecture,mvp,Ios,Swift,Architecture,Mvp,假设我有一个带有Date属性的类 class SomeModel { ..some properties let date: Date = Date(timeIntervalSince1970: 1505050) ..more properties } 我需要使用这个转换(或者任何其他的,仅仅是示例)来显示它 使用模型视图演示器模式,如果我将SomeModel传递到视图并在那里执行转换,由于其他属性是String/Int,并且很容易显示它们,那么什么更容易呢。或者我应该
Date
属性的类
class SomeModel {
..some properties
let date: Date = Date(timeIntervalSince1970: 1505050)
..more properties
}
我需要使用这个转换(或者任何其他的,仅仅是示例)来显示它
使用模型视图演示器模式,如果我将SomeModel
传递到视图
并在那里执行转换,由于其他属性是String
/Int
,并且很容易显示它们,那么什么更容易呢。或者我应该为每个SomeModel
字段创建属性吗
var someText: String {
return model.someText
}
var stringDate: String {
return createString(from: model.date)
}
..other properties
然后调用updateUI
like
func updateUI() {
someLabel.text = presenter.someText
dateLabel.text = presenter.stringDate
..other properties
}
或者甚至可以将两者结合起来,但这听起来是个坏主意,因为
View
无论如何都会获取Date
属性。视图不应该对数据的任何转换和操作负责。
有两种可能的方法可以克服此问题:
视图不应对数据的任何转换和操作负责。 有两种可能的方法可以克服此问题:
使用MVP,您希望Presenter层执行视图层的所有自定义显示逻辑,而不希望对模型层执行任何操作,它应该只是数据库中对象定义方式的简单表示) 首先,我将在一个字符串扩展名文件中创建一个自定义init
extension String {
init(from date: Date) {
// custom logic goes here
}
}
然后,在您的相关演示者中,只有一个属性调用此扩展类来执行数据操作,这样其他演示者也可以使用此逻辑,例如
public class Presenter {
public var customProperty: String {
return String.init(from: model.date)
}
}
使用MVP,您希望Presenter层执行视图层的所有自定义显示逻辑,而不希望对模型层执行任何操作,它应该只是数据库中对象定义方式的简单表示) 首先,我将在一个字符串扩展名文件中创建一个自定义init
extension String {
init(from date: Date) {
// custom logic goes here
}
}
然后,在您的相关演示者中,只有一个属性调用此扩展类来执行数据操作,这样其他演示者也可以使用此逻辑,例如
public class Presenter {
public var customProperty: String {
return String.init(from: model.date)
}
}
因此,您传递的模型有两个属性
date:date
和stringDate:String{return”“}
?是的,正确的方法是在模型中有一个私有变量(您的日期)以及用于访问或修改来自外部类的值的所有公共计算属性。因此,您传递具有两个属性的模型date:date
和stringDate:String{return”“}
?是的,正确的方法是在模型中包含一个私有变量(您的日期)以及所有用于从外部类访问或修改值的公共计算属性。