iOS中的DateFormatter属于视图模型或模型或控制器?

时间:2018-05-17 12:16:46

标签: ios model-view-controller mvvm nsdateformatter

任何人都可以确认iOS(Swift)中的DateFormatter属于ViewModel或模型或控制器等架构级别吗?

5 个答案:

答案 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表示进行响应。此外,视图模型将触发所有发送和接收数据的调用(使用数据管理器)以及任何数据操作,以使其准备好在视图中显示。

您可以在下面的链接中找到完整的答案

MVVM vs MVC

答案 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的子类进行映像,将属性公开为dateFormatdate,用于仅显示日期。

另一个非常重要的事情是,初始化时日期格式化程序非常慢。因此,如果可能的话,我们会尝试使用工具将日期格式化程序保存在静态上下文中,以便重用它们。有些人会将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应该在某个静态上下文中,而格式描述应该尽可能接近视图本身。

相关问题