これは、Swift5.3のFunction Builderの機能強化によるものだと思います。
https://www.youtube.com/watch?v=LKFVcc_uC60
上記のYoutube動画の17分頃の「local let and var」の説明がその部分です。
従来のSwift5.2のFunction Builderは、buildBlockに指定できるものを複数並べるか、それをif文で切り分けるくらいしかできませんでした。従来でもletで変数を宣言した場合は、最後にreturnをつけて、そのreturnの戻りにViewを記述すればビルドが通っていましたが、それが通る理由は、returnを記述することでFunction Builderを適用する部分が最後のreturn行だけに限定されるようになる(そのため、returnより前の部分は通常のSwift文法で自由に書ける)ためだったと思います。
returnを記述しない場合は、ブロック全体がFunction Builderの適用対象になり、Swift5.2はその中ではif文くらいしか使えませんでしたが、Swift5.3では、Function Builderの中に書けることが強化され、いろいろできるようになったようです。なお、冒頭の動画では23分頃にfor文も使えるように説明されていますが、これはbuilder側でbuildArrayを定義する必要があるようで、SwiftUIのViewBuilderではそこまでサポートされていません。
今のところSwiftUIのViewBuilderで新たにできるようになったのは、let
, var
, switch - case
, if let
, if #available
といったところだと思います。if文しか使えなかったのに比べると色々できるようになったように見えますが、 print
や別の関数呼び出しや代入のような通常のSwiftの文はやはり使えず、なんでもできるようになったわけではありません。(おそらく思想的に、なんでもできるようにするつもりもないのだろうと思います。)
この機能の開発状況の情報は、次のURLにあるようです。
https://forums.swift.org/t/function-builders-implementation-progress/32981
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/24 01:03