Skip to content

Instantly share code, notes, and snippets.

HeaderView(
viewModel:
.init(
title: "Rotation",
leftButtonTitle: "Done",
leftButtonAction: {
presentationMode.wrappedValue.dismiss()
}
),
rightControls: {
extension HeaderView where RightControls == EmptyView {
init(viewModel: HeaderViewModel, @ViewBuilder leftControls: @escaping () -> LeftControls) {
self.init(viewModel: viewModel, leftControls: leftControls, rightControls: { EmptyView() })
}
}
extension HeaderView where LeftControls == EmptyView, RightControls == EmptyView {
init(viewModel: HeaderViewModel) {
self.init(viewModel: viewModel, leftControls: { EmptyView() }, rightControls: { EmptyView() })
}
extension HeaderView where LeftControls == EmptyView {
init(viewModel: HeaderViewModel, @ViewBuilder rightControls: @escaping () -> RightControls) {
self.init(viewModel: viewModel, leftControls: { EmptyView() }, rightControls: rightControls)
}
}
HeaderView(
viewModel:
.init(
title: "Rotation",
leftButtonTitle: "Done",
leftButtonAction: {
presentationMode.wrappedValue.dismiss()
}
),
leftControls: { EmptyView() },
HeaderView(
viewModel: .init(
title: "Size",
leftButtonTitle: "Done",
leftButtonAction: {
presentationMode.wrappedValue.dismiss()
}
),
leftControls: {
Stepper(/*...*/)
struct HeaderView<LeftControls: View, RightControls: View>: View {
init(
viewModel: HeaderViewModel,
@ViewBuilder leftControls: @escaping () -> LeftControls,
@ViewBuilder rightControls: @escaping () -> RightControls) {
// Assignments removed for brevety
}
private var viewModel: HeaderViewModel
struct HeaderView: View {
var viewModel: HeaderViewModel
var body: some View {
ZStack {
HStack {
if let leftButtonTitle = viewModel.leftButtonTitle {
Button(leftButtonTitle) {
viewModel.leftButtonAction?()
}
}
class HeaderViewModel {
init(
title: String,
leftButtonTitle: String? = nil,
leftButtonAction: (() -> ())? = nil,
sizeControlCallback: Binding<Int>? = nil,
sizeIndicator: String? = nil,
colorIndicator: UIColor? = nil,
tiltIndicator: String? = nil) {
// Assignments removed here for brevity