Skip to content

[SR-13188] Please support @ViewBuilder for properties #55628

@twostraws

Description

@twostraws
Previous ID SR-13188
Radar None
Original Reporter @twostraws
Type New Feature
Status Resolved
Resolution Done
Additional Detail from JIRA
Votes 1
Component/s Compiler
Labels New Feature, FunctionBuilder, TypeChecker
Assignee None
Priority Medium

md5: 7cb2c7fde2a7f991ee63ebf387d335e3

Issue Description:

I would like you consider adding support for @ViewBuilder to be used with properties, so that the memberwise initializer Swift generates for structs automatically gains that function builder.

As an example, if I wanted to implement a custom SwiftUI VStack right now, I might start with this:

struct CustomVStack<Content: View>: View {
    let content: () -> Content

    var body: some View {
        VStack {
            // custom stuff here
            content()
        }
    }
}

However, that doesn't support @ViewBuilder, and so this kind of code would not work:

CustomVStack {
    Text("Hello")
    Text("Hello")
}

To fix this, I need to define a custom initializer:

init(@ViewBuilder content: @escaping () -> Content) {
    self.content = content
}

In this simple example it isn't a massive problem, but often that initializer has to copy in lots of values – it does exactly what the memberwise initializer did now just with @ViewBuilder for the single content property.

Ideally I'd like to be able to write something along these lines:

struct CustomVStack<Content: View>: View {
    @ViewBuilder let content: () -> Content

    var body: some View {
        VStack {
            // do stuff
            content()
        }
    }
}

Thank you!

Metadata

Metadata

Assignees

No one assigned

    Labels

    compilerThe Swift compiler itselfmemberwise initFeature: Memberwise structure initializersresult buildersFeature: Result buildersstructFeature → type declarations: Structure declarationsswift evolution implementedFlag → feature: A feature that was approved through the Swift evolution process and implementedtype checkerArea → compiler: Semantic analysis

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions