AnyView
SwiftUI には AnyView と呼ばれる特別な View 定義がある。これは View の型消去を行うもので、異なる型の View を同一の型で扱いたい時などに重宝する。が、いくつか注意点がある。 まず、List 内の ForEach の内側で AnyView を利用すると、SwiftUI は AnyView を描画した結果 View がいくつ生成されるのか?事前にわからないため、List が事前に行数を確認する際に全行の View を生成する必要がある。 また、SwiftUI は View の再描画が必要かどうか?のチェックのために、View の型構造の同一性をチェックしている。AnyView を利用していると型情報が隠蔽されてしまうため、このチェックが行えず、必要以上に View が再描画されてしまう可能性がある。 他にも、Apple は以下のようなデメリットを紹介している。
本来使わなくても表現できる箇所で AnyView を安易に使うと、コードが読みにくくなってしまう
ジェネリクスを使える場合は、ジェネリクスを活用する
型消去をしてしまうため、コンパイラから有用なエラーメッセージや警告が表示できない可能性がある