代码之家  ›  专栏  ›  技术社区  ›  Axel

如何在SwiftUI中将不同类型的视图传递给另一个视图?

  •  0
  • Axel  · 技术社区  · 4 年前

    所以我有这个 TestView 哪个接受 headerContent bodyContent ,

    struct TestView<Content: View>: View {
      var headerContent: (() -> Content)?  = nil
      let bodyContent: () -> Content
      
      var body: some View {
    
        VStack {
          headerContent?()
          bodyContent()
        }
      }
    }
    

    我把它当作,

    struct ContentView: View {  
      var body: some View {
        TestView(headerContent: {
          Text("HeaderContent")
        }) {
          ScrollView {
    
          }
        }
      }
    }
    

    但我得到了以下错误,

    Cannot convert value of type 'ScrollView<EmptyView>' to closure result type 'Text'
    

    我错过了什么?

    1 回复  |  直到 4 年前
        1
  •  1
  •   George    4 年前

    你需要两个 View headerContent bodyContent 它们不一样。

    Content 看法 . 然而,两者 Text ScrollView 是不同的类型,不一样。

    struct TestView<HeaderContent: View, BodyContent: View>: View {
        var headerContent: (() -> HeaderContent)? = nil
        let bodyContent: () -> BodyContent
    
        var body: some View {
            VStack {
                headerContent?()
                bodyContent()
            }
        }
    }