【问题标题】:Cannot call value of non-function type 'DrawCircleSegment'无法调用非函数类型“DrawCircleSegment”的值
【发布时间】:2020-02-01 14:08:30
【问题描述】:

作为一名初级程序员,我已经尝试了很多解决以下问题的方法,但似乎都没有奏效。此外,这个论坛中提供的答案似乎太复杂了,我无法提供帮助。因此,我们将不胜感激。还试图理解为什么这部分不会编译,而如果我填写硬编码值,它会。


    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))
    }
}

【问题讨论】:

    标签: swift compiler-errors swiftui


    【解决方案1】:

    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

    【讨论】:

    • 我试过你的解决方案,确实解决了上面提到的编译器错误。但是,它介绍了其他人,并且不会解决我想定义一个圆的许多部分(如飞镖板)的主要问题,所有这些部分的属性都略有不同。显然,我需要更好地处理对象以及如何操作它们。我去看看风格指南,很有帮助。
    • 是的,以编程方式绘图可能是一个相当大的挑战,即使对于熟练的开发人员也是如此。最好先学习一些教程或类似的东西,这样您就可以从经验丰富的开发人员那里学习一些交易技巧,这可能会让您更轻松
    猜你喜欢
    • 2017-08-16
    • 2021-01-15
    • 2021-03-30
    • 2016-03-10
    • 2016-09-26
    • 2017-06-27
    • 2019-05-05
    • 2016-05-22
    • 1970-01-01
    相关资源
    最近更新 更多