任何人都可以确认iOS(Swift)中的DateFormatter属于ViewModel或模型或控制器等架构级别吗?
答案 0 :(得分:1)
它应该是视图模型:
ViewModel encapsulates data/properties that the view can bind to and any validation logic and actions that can be performed
。通常,ViewModel通过调用模型类中的方法与模型进行交互。 ViewModel然后以视图可以轻松使用的形式提供模型中的数据。在这种模式中,我们基本上采用了应用程序的状态并将其放入ViewModel。
答案 1 :(得分:1)
基本上,您对模型所做的任何更改或从模型获取任何数据都应该转到viewModel。 因此,您应该在viewModel
中使用dateformatter答案 2 :(得分:1)
视图模型
它作为Model和View之间的中介,ViewModel提供业务逻辑和视图/视图控制器之间的连接。
视图(UI)通过将输入数据(由模型定义)传递给viewModel来响应用户输入。反过来,ViewModel评估输入数据并根据业务逻辑工作流以适当的UI表示进行响应。此外,视图模型将触发所有发送和接收数据的调用(使用数据管理器)以及任何数据操作,以使其准备好在视图中显示。
您可以在下面的链接中找到完整的答案
答案 3 :(得分:1)
你可以这样:
enum FormatDateTimeType {
case time
case shortDate
}
extension Date {
func string(_ formattedAs: FormatDateTimeType) {
.......
}
}
那么你的文字组件应该使用日期'字符串' func是这样的:
myTextField.text = myModel.date.string(.shortDate)
答案 4 :(得分:-1)
尽管这里发布了答案,但我们应该更深入地研究这个具体案例。日期格式化程序是一种在日期(时间戳)和该时间戳的可视表示形式之间进行转换的工具。从某种意义上说,这是一个关于如何呈现信息的描述。在我看来,它更接近于font
,通常是在视图上。
如果您在多种情况下使用视图模型,则意味着您可能需要对此相同数据进行多种不同的表示。例如,可以在表格视图单元格上使用相同的模型来单独使用日期。然后按下单元格可能会打开一个新屏幕,代表同一模型,显示日期和时间,甚至是日期的年龄。
从那个角度来看(不是我看错了)我宁愿把日期格式化程序放在视图或视图控制器上。对UILabel
的子类进行映像,将属性公开为dateFormat
和date
,用于仅显示日期。
另一个非常重要的事情是,初始化时日期格式化程序非常慢。因此,如果可能的话,我们会尝试使用工具将日期格式化程序保存在静态上下文中,以便重用它们。有些人会将DataTools.timeString(fromDate: myDate)
上的Date
个其他扩展程序等工具设为myDate.timeString
。有些甚至枚举格式化程序,导致myDate.string(formattedAs: .time)
。
使用最后一种方法可能是最好的,因为您可以使用您的格式甚至作为属性。现在你需要基本上选择哪种看起来更适合你:
timeLabel.text = model.date.string(formattedAs: .time)
dateLabel.text = model.date.string(formattedAs: .shortDate)
或
timeLabel.text = model.dateStringFormattedAsTime
dateLabel.text = model.dateStringFormattedAsShortDate
所以如果你问我DateFormatter
应该在某个静态上下文中,而格式描述应该尽可能接近视图本身。