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