【问题标题】:Incrementing a variable in a ForEach loop (SwiftUI)在 ForEach 循环中增加变量(SwiftUI)
【发布时间】:2020-05-26 06:31:10
【问题描述】:

我正在尝试编写代码,通过根据数组中的百分比绘制一系列弧线来创建旭日形图。但是,每当我尝试在 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))
            }
        }
    }
  }
}

【问题讨论】:

    标签: swift foreach swift4 swiftui


    【解决方案1】:

    首先,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))
            }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-30
      • 2014-12-14
      • 2014-01-07
      • 2014-11-18
      • 2013-01-16
      • 2013-11-25
      相关资源
      最近更新 更多