繁体   English   中英

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

[英]How to return a View type from a function in Swift UI

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

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

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

谢谢您的帮助。

截至 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()
    }
}

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

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

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

制作 AnyView() 包装器

func getView(view: String?) -> AnyView {
     
   if view == "CreateUser" {
       return AnyView(CreateNewsView())
   }
    
   return AnyView(EmptyView())
        
}

你应该返回some View

前任:

func getView(view: String) -> some View {
     return YourView()
}

有关某些视图的更多详细信息,请查看

我使用扩展名.eraseToAnyView ()使某些 View 的功能更容易:

extension View {
      public function eraseToAnyView () -> AnyView {
          AnyView (on its own)
      }
}

最终解决方案将如下所示:

func getView (view: String?) -> AnyView {
         if view == "CreateUser" {
         return CreateNewsView().eraseToAnyView()
     }
         return EmptyView().eraseToAnyView()
}

我认为这是最简洁的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM