型情報を消せるAnyView、便利でついつい使ってしまいますがなるべくなら使いたく無いところ。
別メソッドにしたケース
bodyの中が複雑になった時に、次のように別メソッドに分けることがあります。
some Viewでは返せないのでAnyViewにして型を揃えています。
(some Viewで返そうとすると
Function declares an opaque return type, but the return statements in its body do not have matching underlying types
と言われてコンパイルできない)
var body: some View {
rootView
}
var rootView: AnyView {
if isAuthorized {
return AnyView(HomeView())
} else {
return AnyView(LoginView())
}
}
このようなケースの場合、rootViewをViewBuilderにすることでAnyViewを消すことができます。
@ViewBuilder
var rootView: some View {
if isAuthorized {
HomeView()
} else {
LoginView()
}
}
}