4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

SwiftUIでOptional型のBindingの変数をunwrapする方法

Posted at

SwiftUIでToDoアプリを作っていて、CoreDataに保存した日付データを持ってきて、表示しようと思いました。
この時の場合、日付をセットしない場合のことも考えて日付はOptional型で保存していました。
そして、日付がnilだった時(日付を設定してない時)に「日付をセットする」ボタンのようなものをつけたいと思いました。
そこで、最初に書いたコードが次のコードです。(body変数の中で、taskはCoreDataから取ってきたデータの入った変数です。task.dateBinding<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)!)
}

これを実行してみると、目的通りに動きました。

最後に

何度か検索キーワードを変えてやっと出てきたので、また検索して時に出てこないかもしれないと思い、自分用のメモのような意味で書きました。
もっと良い方法や、間違い、改善点などがありましたら、コメントや編集リクエストなどをご気軽にお願いします。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?