我想编写与视图一起工作的实用程序,以执行诸如有条件地显示视图之类的操作,并执行诸如 intersperse
之类的操作,其中重复视图并在每次迭代之间插入某种分隔符。我不知道如何定义函数类型签名。这是我目前得到的:
func ifNotLastCategory(_ cat: String, content: () -> AnyView) -> AnyView {
if (cat != movie.categories.last) { return content() }
}
...
ifNotLastCategory(category) { Text("Hello World") }
当我尝试做类似的事情时,我收到关于 Cannot convert value of type 'some View' to closure result type 'AnyView'
的编译器错误。但是它不会让我将 content
定义为返回 some View
。
我怎样才能使这个功能起作用?
答案 0 :(得分:3)
尽量不要使用 AnyView
,除非您确实有充分的理由。在大多数情况下,您可以使用其他更效率和更清洁的解决方案。
在您的情况下,我建议使用 @ViewBuilder
并返回 some View:
@ViewBuilder
func ifNotLastCategory<V: View>(_ cat: String, content: () -> V) -> some View {
if cat != movie.categories.last {
content()
}
}