You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.1 KiB

Children

I'm still trying to really nail this one down, but it seems possible to pass children to child views in SwiftUI. This example shows a common Layout, Content composition pattern which I commonly use in React, and is the key to developing reusable, flexible components.

React

import React from "react";

function Page() {
  return (
    <Layout>
      <span>This is the page content</span>
    </Layout>
  );
}

function Layout({ children }) {
  return (
    <div>
      <span>This is the layout</span>
      {children}
    </div>
  );
}

SwiftUI

The SwiftUI version seems harder to type. Currently, the below example only accepts a Text child. Does anyone know how to make this accept any view type?

import SwiftUI

struct Page : View {
    var body: some View {
        Layout() {
            Text("This is the page content")
        }
    }
}

struct Layout : View {

    var content: () -> Text

    var body: some View {
        VStack {
            Text("This is the layout")
            content()
        }
    }
}