-
Notifications
You must be signed in to change notification settings - Fork 10.7k
Description
| 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!