SwiftUIでToDoアプリを作っていて、CoreDataに保存した日付データを持ってきて、表示しようと思いました。
この時の場合、日付をセットしない場合のことも考えて日付はOptional型で保存していました。
そして、日付がnilだった時(日付を設定してない時)に「日付をセットする」ボタンのようなものをつけたいと思いました。
そこで、最初に書いたコードが次のコードです。(body
変数の中で、taskはCoreDataから取ってきたデータの入った変数です。task.date
はBinding<Date?>
となっていました。)
if task.date == nil {
Button(action: {
self.task.date = Date()
}) {
Text("Set Date")
}
} else {
DatePicker("Date", selection: $task.date!)
}
すると次のようなエラーが出てしまいました。
Cannot convert value of type 'Binding<Date?>' to expected argument type 'Binding<Date>'
そこで色々と検索して、とあるStackOverflowの質問を見ると、Binding($task.date)!
で同じようなことができるとわかりました。
if task.date == nil {
Button(action: {
self.task.date = Date()
}) {
Text("Set Date")
}
} else {
DatePicker("Date", selection: Binding($task.date)!)
}
これを実行してみると、目的通りに動きました。
最後に
何度か検索キーワードを変えてやっと出てきたので、また検索して時に出てこないかもしれないと思い、自分用のメモのような意味で書きました。
もっと良い方法や、間違い、改善点などがありましたら、コメントや編集リクエストなどをご気軽にお願いします。