【发布时间】:2021-11-07 10:15:14
【问题描述】:
你能帮我提供以下源代码吗:
import SwiftUI
class DateHandler {
/* create a variable
Class to manage start date and end date
*/
var date1 : Date {
didSet{
print("StartDate: \(date1)")
}
}
var date2 : Date {
didSet{
print("EndDate: \(date2)")
}
}
var startDate:Date {
get{
return date1
}
set(newValue){
date1 = toLocalTime(date: newValue)
}
}
var endDate:Date {
get{
return date2
}
set(newValue){
date2 = addOneDay(date: toLocalTime(date: newValue))
}
}
init(){
self.date1 = Date()
self.date2 = Date()
}
//Customize time zone
func toLocalTime(date : Date) -> Date {
//Auswahl der aktuellen Kalender
let calendar = Calendar.current
//Auswahl der Zeitzone
let timezone = TimeZone.current
//Bestimmen Anzahl Sekunden zwischen Zeitzone und GMT
let seconds = TimeInterval(timezone.secondsFromGMT(for: date))
//Anpassen des eingelesenen Werts
let newDate = calendar.date(bySettingHour: 00, minute: 00, second: 00, of: date)
let dateLocalTimezone = Date(timeInterval: seconds, since: newDate!)
return dateLocalTimezone
}
func addOneDay(date : Date) -> Date {
let tomorrow = Calendar.current.date(byAdding: .day, value: 1, to: date)
return tomorrow!
}
}
//Class to use DateHandler() as a ObservableObject
class DateHandlerHelper : ObservableObject{
@Published var dateHandler = DateHandler()
}
struct ContentView: View {
@ObservedObject var dateHandlerHelper = DateHandlerHelper()
@State var startDateHelper = Date()
@State var endDateHelper = Date()
var body: some View {
DatePicker("Date1", selection: $startDateHelper)
.onAppear(perform: {
print("onAppear")
dateHandlerHelper.dateHandler.startDate = startDateHelper
print(dateHandlerHelper.dateHandler.startDate)
})
.onChange(of: startDateHelper) { newValue in
print("onChange")
dateHandlerHelper.dateHandler.startDate = newValue
if newValue > endDateHelper{
print("Correction Date 1")
startDateHelper = endDateHelper
dateHandlerHelper.dateHandler.startDate = endDateHelper
}
print(dateHandlerHelper.dateHandler.startDate)
}
DatePicker("Date2", selection: $endDateHelper)
.onAppear(perform: {
dateHandlerHelper.dateHandler.endDate = endDateHelper
print(dateHandlerHelper.dateHandler.endDate)
})
.onChange(of: endDateHelper) { newValue in
print("onChange")
dateHandlerHelper.dateHandler.endDate = newValue
print(dateHandlerHelper.dateHandler.endDate)
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
我有一个带有两个 DatePicker 的视图来选择开始日期和结束日期。对于开始日期和结束日期,有 DateHandler 类。
我想将 DateHandler 类作为 ObservableObject 处理。由于使用了getter/setter函数,我只能通过DateHandlerHelper类间接寻址DateHandler类。这里有更好/更简单的方法吗?
如果我直接通过 DatePickers 处理变量 dateHandlerHelper.dateHandler.startDate 和 dateHandlerHelper.dateHandler.endDate,我可以更改值,但 DatePickers 本身不会更新。为此,我在视图中引入了变量 startDateHelper 和 endDateHelper。你知道我可以如何以不同的方式来保存变量吗?
【问题讨论】:
标签: swiftui datepicker