首页 > 解决方案 > 将绑定结构传递给 SwiftUI 中的视图

问题描述

我目前正在尝试重构一些用于绘制用户输入的 SwiftUI 代码,以便更少的内容包含在 ContentView 中。

为此,我创建了一个结构,其中包含跟踪用户绘图所需的大部分有状态元素。

这是该枚举的样子:

import Foundation
import SwiftUI
struct DrawableStaff{
    var drawing: Drawing = Drawing()
    var drawingList: [Drawing] = [Drawing]()
    var paths: [Path] = [Path]()
    var PathHolder = Path()
    var color = Color.primary
    var lineWidth: CGFloat = 3.0
}

接下来,我重构了绘图代码以更好地适应枚举:

struct DrawingPad: View {
    
    @Binding var drawableStaff: DrawableStaff
    
    var body: some View {
        GeometryReader { geometry in
            Path { path in
                for drawing in self.drawableStaff.drawings {
                    self.add(drawing: drawableStaff.drawing, toPath: &path)
                }
                self.add(drawing: self.drawableStaff.currentDrawing, toPath: &path)
                self.drawableStaff.pathHolder = path
            }
            .stroke(self.drawableStaff.color, lineWidth: self.drawableStaff.lineWidth)
                .background(Color(UIColor.systemBackground))
                .gesture(
                    DragGesture(minimumDistance: 0.1)
                        .onChanged({ (value) in
                            let currentPoint = value.location
                            if currentPoint.y >= 0
                                && currentPoint.y < geometry.size.height {
                                self.drawableStaff.currentDrawing.points.append(currentPoint)
                            }
                        })
                        .onEnded({ (value) in
                            self.drawableStaff.drawings.append(self.currentDrawing)
                            self.drawableStaff.currentDrawing = Drawing()
                        })
            )
                        
            
        }
        .frame(maxHeight: .infinity)
    }

我试图通过使用在 ContentView 的正文中调用 DrawingPad

struct ContentView: View {
    @State private var staff1DrawableStaff = DrawableStaff()    
    var body: some View {
        VStack {            
            let staff1 = ZStack{
                DrawingPad(drawableStaff: $staff1DrawableStaff)
        }
    }
}

我现在收到许多关于在 DrawableStaff 定义期间访问 drawableStaff 内部成员的错误。如何修复这些错误?

“无法将 'Binding' 类型的值转换为预期的参数类型 'Drawing'”

标签: iosswiftiphonemobileswiftui

解决方案


推荐阅读