作为一个入门的程序员,我已经尝试了许多解决以下问题的解决方案,但似乎没有一个可行。另外,此论坛中提供的答案对于我来说似乎太复杂了,无法提供帮助。因此,将不胜感激。还试图理解为什么这部分不编译,而如果我填写硬编码的值,它将编译。


    struct ContentView: View {
        static let segmentCount = 2
        var DrawArc = DrawCircleSegment()
        var body: some View {

            VStack {
                ForEach(1..<ContentView.segmentCount){ i in
                    DrawArc(r: CGFloat(50.0 * i), center_x: 100.0, center_y: 100,   arc_start: 0, arc_end: 90, arc_width: 30)
                }
            }
        }
    }
struct DrawCircleSegment: View {
    let r: CGFloat
    var center_x: CGFloat
    var center_y: CGFloat
    var arc_start: Angle
    var arc_end: Angle
    var arc_width: CGFloat

    init() {
        r = 0.0
        center_x = 0.0
        center_y = 0.0
        arc_end = Angle(degrees: 0.0)
        arc_start = Angle(degrees: 0.0)
        arc_width = 0.0
    }

    var body: some View {
        Path { path in

            path.addArc(center: CGPoint(x: center_x, y: center_y), radius: r, startAngle: arc_start, endAngle: arc_end, clockwise: false)
            path.addLine(to: CGPoint(x: 100.0, y: 200.0))
            path.addArc(center: CGPoint(x: 100.0, y:100.0), radius: r * 2, startAngle: Angle(degrees:90.0), endAngle: Angle(degrees:0.0), clockwise: true)
            path.addLine(to: CGPoint(x:200, y:100))
                }
        .fill(Color(red: 79.0 / 255, green: 79.0 / 255, blue: 191.0 / 255))
    }
}

最佳答案

var DrawArc = DrawCircleSegment()
这段代码创建了一个DrawCircleSegment类型的实例/对象,因此DrawCircleSegment是cookie切割器,而drawArc(以下有关Swift变量命名的注意事项)将是cookie。

因此,调用DrawArc(r: CGFloat(50.0 * i), center_x: 100.0, center_y: 100, arc_start: 0, arc_end: 90, arc_width: 30)是不正确的,因为您试图从一个值而不是一个类型初始化一个值。

更改

DrawArc(r: CGFloat(50.0 * i), center_x: 100.0, center_y: 100,   arc_start: 0, arc_end: 90, arc_width: 30)


DrawCircleSegment(r: CGFloat(50.0 * i), center_x: 100.0, center_y: 100,   arc_start: 0, arc_end: 90, arc_width: 30)

如果您想使用别名来给它起一个简短的名字,您可以这样做:
typealias DrawArc = DrawCircleSegment

然后,您可以通过DrawArc对其进行初始化。

边注:

在Swift中,我们对变量名使用lowerCamelCase样式,而对Types只使用UpperCamelCase。您应该结帐the Swift style guide

关于swift - 无法调用非函数类型 'DrawCircleSegment'的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58216020/

10-10 21:12