0
我對與我想更新3個標籤的簡單視圖模型下面的代碼:初始化視圖模型與默認值
struct State {
var timeLabelText: String?
var timeLabelHidden: Bool
var dayLabelText: String
var dateLabelText: String
}
class ViewModel {
var state: State = State(timeLabelText: nil, timeLabelHidden: true, dayLabelText: "Day 0", dateLabelText: "June 19, 2017") {
didSet {
callback(state)
}
}
var callback: ((State) -> Void)
init(callback: @escaping (State) -> Void) {
self.callback = callback
callback(state)
}
var date: String {
get {
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .long
return dateFormatter.string(from: Date())
}
}
}
這將初始化我的UI從State
的默認值。但是對於dateLabelText
我想在顯示UI之前用實際日期對它進行初始化。
在哪裏做正確的地方?我應該在ViewModel初始化器中去做嗎?
init(callback: @escaping (State) -> Void) {
self.callback = callback
state.dateLabelText = date // add this here
callback(state)
}
好主意。謝謝。但我不明白,你爲什麼說日期應該是一種方法而不是財產? – Kobe
每次調用'thing.date'時,都會格式化當前日期,因此每次訪問它時都會使用不同的DateTime。通常這種行爲類型更好地表達爲一種方法。屬性通常用於存儲和轉發定義的信息,而不是每次訪問時都會更改的信息。沒什麼大不了的,只是我的偏好:) – PeejWeej
哦,好吧,我想你有一點。感謝您指出了這一點。 – Kobe