DatePickerビューは、日付や時刻を選択してもらうためのビューで、状態変数に値をバインドすることでユーザーが選択した値を読み取ることができる。

まずは基本的なDatePickerビューの実装コードを紹介しよう。

struct ContentView: View {
    @State var selectDate = Date()
    
    var body: some View {
        VStack {
            DatePicker(selection: $selectDate,
                       displayedComponents: [.date],
                       label: {Text("日付")})
            Text("\(selectDate)")
        }
    }
}

あらかじめ@Stateで状態変数を定義しておき、DatePickerの引数selectionで関連付けを行う。
displayedComponentsではピッカーの外観を設定するコンポーネントを配列で指定し、labelにラベルとして表示するビューを指定する。

ちなみにdisplayedComponentsのデフォルトは[hourAndMinute, date]となっており、displayedComponentsの指定を省略すると以下のようなUIとなる。

日付の選択範囲を指定する

引数inにDate型の範囲を与えることで、ピッカーで選択可能な日付の範囲を指定することもできる。

struct ContentView: View {
    @State var selectDate = Date()
    var from: Date {
        let format = DateFormatter()
        format.dateFormat = "yyyy-MM-dd"
        return format.date(from: "2019-05-01")!
    }

    var body: some View {
        VStack {
            DatePicker(selection: $selectDate,
                       in: from...Date(),
                       displayedComponents: [.date],
                       label: {Text("令和")})
            Text("\(selectDate)")
        }
    }
}

上記のコードは令和以降の日付しか選択させないようにする例だ。

iOSシミュレーターで動作確認をすると分かるが、ピッカーの表記上は2018年以前も表示されているが、選択しようとすると強制的に2019年5月1日に戻される。