Как узнать, какого дня пользователь коснулся в окне выбора даты в SwiftUI

#swift #swiftui

Вопрос:

Добрый день, сообщество,

Я хотел бы знать, есть ли какой-либо способ узнать, какой день был нажат в датапикере в swiftui, так как я хочу знать, какой день нажал пользователь, и иметь возможность сохранить его в переменной?

 DatePicker("My calendar", selection: $startDate,in:Date()..., displayedComponents: .date)
        
        .accentColor(.Teal)
        .background(
                       RoundedRectangle(cornerRadius: 30)
                        .stroke(Color.Teal, lineWidth: 3)
                    )
        .labelsHidden()
        .environment(.colorScheme, .dark)
        .datePickerStyle(GraphicalDatePickerStyle())
        .padding()
        }
 

введите описание изображения здесь

Как на фотографии, как я могу узнать, что пользователь нажал на 12 или 13 день, есть ли делегат, который должен знать об этом в swiftui?

Ответ №1:

Вы можете использовать onChange(of:perform:) модификатор для обнаружения изменений в выбранной дате:

 .onChange(of: startDate) { newDate in
    print("selected date: (newDate)")

    let day = Calendar.current.dateComponents([.day], from: newDate).day!
    print("day: (day)")
}
 

Примеры отпечатков:

выбранная дата: 2021-08-20 21:59:00 0000
день: 20

Ответ №2:

Вы определили дату начала $для выбора. Вам нужна переменная состояния с именем StartDate для хранения выбранной даты.

Для получения полного объяснения перейдите по этой ссылке: https://www.hackingwithswift.com/quick-start/swiftui/how-to-create-a-date-picker-and-read-values-from-it

Редактировать: И, как упоминал @George, если вы хотите обнаружить изменение переменной состояния, используйте модификатор onChange(of:perform:).