Увеличение переменной в ForEach l oop (SwiftUI) - PullRequest
1 голос
/ 11 февраля 2020

Я пытаюсь написать код, который создает диаграмму солнечных лучей, рисуя ряд дуг на основе процентов в массиве. Однако всякий раз, когда я пытаюсь отредактировать переменную внутри ForEach l oop, swift выдает следующую ошибку: «Generi c параметр 'S' не может быть выведен» в строке с .stroke. Что-то не так с моим кодом?

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

1 Ответ

0 голосов
/ 11 февраля 2020

Во-первых, код в 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))
        }
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...