Как создать средство выбора дня рождения с помощью SwiftUI: несколько методов с примерами кода

Чтобы создать средство выбора дня рождения с помощью SwiftUI, вы можете использовать представление DatePicker, предоставляемое SwiftUI. Вот несколько методов, которые вы можете использовать, а также примеры кода:

Метод 1: использование DatePicker с привязкой к дате

import SwiftUI
struct ContentView: View {
    @State private var selectedDate = Date()
    var body: some View {
        VStack {
            DatePicker("Select your birthday", selection: $selectedDate, displayedComponents: .date)
                .datePickerStyle(WheelDatePickerStyle())
                .labelsHidden()

            Text("Selected Date: \(selectedDate, formatter: dateFormatter)")
        }
    }

    var dateFormatter: DateFormatter {
        let formatter = DateFormatter()
        formatter.dateStyle = .long
        return formatter
    }
}
// Usage
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Метод 2: Пользовательский DatePicker с использованием Picker

import SwiftUI
struct ContentView: View {
    @State private var selectedYearIndex = 0
    @State private var selectedMonthIndex = 0
    @State private var selectedDayIndex = 0

    let years = Array(1900...2024)
    let months = Array(1...12)
    let days = Array(1...31)

    var body: some View {
        VStack {
            HStack {
                Picker(selection: $selectedYearIndex, label: Text("Year")) {
                    ForEach(0..<years.count) { index in
                        Text("\(years[index])").tag(index)
                    }
                }
                .pickerStyle(WheelPickerStyle())
                .frame(width: 100)

                Picker(selection: $selectedMonthIndex, label: Text("Month")) {
                    ForEach(0..<months.count) { index in
                        Text("\(months[index])").tag(index)
                    }
                }
                .pickerStyle(WheelPickerStyle())
                .frame(width: 100)

                Picker(selection: $selectedDayIndex, label: Text("Day")) {
                    ForEach(0..<days.count) { index in
                        Text("\(days[index])").tag(index)
                    }
                }
                .pickerStyle(WheelPickerStyle())
                .frame(width: 100)
            }

            Text("Selected Date: \(years[selectedYearIndex])-\(months[selectedMonthIndex])-\(days[selectedDayIndex])")
        }
    }
}
// Usage
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

Метод 3. Использование специального представления DatePicker

import SwiftUI
struct BirthdayPicker: View {
    @Binding var selectedDate: Date

    var body: some View {
        DatePicker("Select your birthday", selection: $selectedDate, displayedComponents: .date)
            .datePickerStyle(WheelDatePickerStyle())
            .labelsHidden()
    }
}
struct ContentView: View {
    @State private var selectedDate = Date()
    var body: some View {
        VStack {
            BirthdayPicker(selectedDate: $selectedDate)

            Text("Selected Date: \(selectedDate, formatter: dateFormatter)")
        }
    }

    var dateFormatter: DateFormatter {
        let formatter = DateFormatter()
        formatter.dateStyle = .long
        return formatter
    }
}
// Usage
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}