如何从 Swift UI 中的函数返回视图类型

MSp*_*Dev 9 ios swift

我正在尝试为我的应用程序创建一个有点优雅的导航系统。下面是一个尝试返回 View 类型的函数。这不编译:

    func getView(view: String) -> View {
        switch view {
        case "CreateUser":
            return CreateNewsView()
        default:
            return nil
        }
    }

Run Code Online (Sandbox Code Playgroud)

以上导致编译错误: Protocol 'View' can only be used as a generic constraint because it has Self or associated type requirements

感谢您的帮助。

Fre*_*orf 14

从 Swift 5.3 @h?ng-phúc 开始,答案在某种程度上是正确的,只需要显式添加 @ViewBuilder 属性。

@ViewBuilder func getView(view: String) -> some View {
    switch view {
    case "CreateUser":
        Text(view)
    case "Abc":
        Image("Abc")
    default:
        EmptyView()
    }
}
Run Code Online (Sandbox Code Playgroud)

旁注:请避免使用字符串文字。最好使用枚举。


MSp*_*Dev 5

我设法通过使用 AnyView() 包装器解决了这个问题:

func getView(view: String?) -> AnyView {
        switch view {
        case "CreateUser":
            return AnyView(CreateNewsView())
        default:
            return AnyView(EmptyView())
        }
    }
Run Code Online (Sandbox Code Playgroud)

  • 根据 Apple 的建议,使用 AnyView 对于 SwiftUI 优化来说是一种不好的做法 (5认同)