我正在尝试编写代码,以根据数组中的百分比绘制一系列圆弧来创建森伯斯特图。但是,每当我尝试在ForEach循环中编辑变量时,swift都会出现以下错误:.stroke行上的“无法推断出通用参数'S'”。我的代码有问题吗?
struct pen: View {
let percentages = [19.9, 15.8, 13.7, 9.9, 9.9, 9.4, 7.4, 5.4, 3.1, 2.9, 2.6,]
let changes = [100.5, 101.2, 97.6, 101.8, 98, 98.4, 104.5, 102.9, 99.6, 104.5, 95.4]
@State var cOpacity = 0.0
@State var cColor = 0.0
@State var cAngle = 0.0
@State var nAngle = 0.0
@State var i = 0
var body: some View {
ZStack {
ForEach((1...10).reversed(), id: \.self) {listItem in
VStack {
cAngle = nAngle
nAngle = cAngle + percentages[listItem - 1]
Arc(startAngle: .degrees(0.0), endAngle: .degrees(50.0), clockwise: false)
.stroke(Color.green, lineWidth: CGFloat(15)) //Generic parameter 'S' could not be inferred
.opacity(100.0)
.frame(width: CGFloat(300), height: CGFloat(300))
Text(String(listItem))
}
}
}
}
}
答案 0 :(得分:0)
首先,ForEach
中的代码是封闭的,因此您需要显式执行self.
。另外,您的VStack
无法推断出返回类型,因为其中还有其他代码,因此我建议您编写一个可以完成所有操作的函数。我不确定这是否可以解决所有问题,但请尝试将代码更改为
struct pen: View {
let percentages = [19.9, 15.8, 13.7, 9.9, 9.9, 9.4, 7.4, 5.4, 3.1, 2.9, 2.6,]
let changes = [100.5, 101.2, 97.6, 101.8, 98, 98.4, 104.5, 102.9, 99.6, 104.5, 95.4]
@State var cOpacity = 0.0
@State var cColor = 0.0
@State var cAngle = 0.0
@State var nAngle = 0.0
@State var i = 0
var body: some View {
ZStack {
ForEach((1...10).reversed(), id: \.self) {listItem in
self.render(listItem: listItem)
}
}
func render(listItem: Int) -> some View {
self.cAngle = self.nAngle
self.nAngle = self.cAngle + self.percentages[listItem - 1]
return VStack {
Arc(startAngle: .degrees(0.0), endAngle: .degrees(50.0), clockwise: false)
.stroke(Color.green, lineWidth: CGFloat(15))
.opacity(100.0)
.frame(width: CGFloat(300), height: CGFloat(300))
Text(String(listItem))
}
}
}
}