如何编写一个关闭视图并返回视图的函数?

时间:2021-01-15 00:00:17

标签: swift swiftui

我想编写与视图一起工作的实用程序,以执行诸如有条件地显示视图之类的操作,并执行诸如 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

我怎样才能使这个功能起作用?

1 个答案:

答案 0 :(得分:3)

尽量不要使用 AnyView,除非您确实有充分的理由。在大多数情况下,您可以使用其他更效率更清洁的解决方案。

在您的情况下,我建议使用 @ViewBuilder 并返回 some View

@ViewBuilder
func ifNotLastCategory<V: View>(_ cat: String, content: () -> V) -> some View {
    if cat != movie.categories.last {
        content()
    }
}