It seems that Apple's solution to the designability and usability issues I pointed out earlier is to overload APIs which use multiple closures. For example, the new Gauge SwiftUI view on watchOS 7 has 5 overloads for its initializer:
init<V>(value: V, in: ClosedRange<V>, label: () -> Label)
init<V>(value: V, in: ClosedRange<V>, label: () -> Label, currentValueLabel: () -> CurrentValueLabel)
init<V>(value: V, in: ClosedRange<V>, label: () -> Label, currentValueLabel: () -> CurrentValueLabel, markedValueLabels: () -> MarkedValueLabels)
init<V>(value: V, in: ClosedRange<V>, label: () -> Label, currentValueLabel: () -> CurrentValueLabel, minimumValueLabel: () -> BoundsLabel, maximumValueLabel: () -> BoundsLabel)
init<V>(value: V, in: ClosedRange<V>, label: () -> Label, currentValueLabel: () -> CurrentValueLabel, minimumValueLabel: () -> BoundsLabel, maximumValueLabel: () -> BoundsLabel, markedValueLabels: () -> MarkedValueLabels)
Personally, I think this approach is deeply flawed, from both designability and usability standpoints. But fundamentally I think it indicates that the post-0279 syntax isn't up to the job of producing APIs using multiple closures. Requiring overloading to produce a usable API places a huge burden on API designers, both in initial work and long term maintenance. I think it's more likely most designers either won't implement such overloads, making for a subpar user experience, or they'll avoid multiple closure APIs altogether. Neither is good for the community.
I would hope that Apple's own experience creating multiple closure APIs would've produced the experience necessary for further consideration on this topic, but that seems unlikely at this point.
@ben-cohen Are there any more details to share about the path forward here, or any response to the various issues raised in this thread?