Используйте данные для определения количества объектов в массиве - PullRequest
1 голос
/ 26 марта 2020

Я работаю над контрольным списком в SwiftUI и хочу определить количество флажков в моих данных. Так, например, в случае с фруктами пользователь должен отметить 3 флажка, в то время как вода требует больше проверок, потому что вам нужно пить больше стаканов воды в день.

Я использую «для каждого» в HStack, чтобы создать массив флажков:

 HStack {
           ForEach(0 ..< 3) { index in
           VStack {
               Button(action: {
                  self.checked[index].toggle()
                                    })

Я хочу заменить (0 .. <3) ​​</strong> на checklist.steps , где находится сумма (INT ).

let checklistData = [
    Checklist(title: "Fruit", instruction: "1 vakje = 1 stuk of 100g", steps: Int(4)),

Можно ли определить количество флажков в моих данных?

Заранее спасибо <3 </p>

Решение

У меня работал следующий код:

HStack {
           ForEach(0 ..< checklist.steps) { index in
           VStack {
               Button(action: {
                  self.checked[index].toggle()
                                    })

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Я не уверен, хотите ли вы этого?

HStack {
       ForEach(0 ..< checklistData[x].steps) { index in
       VStack {
           Button(action: {
              self.checked[index].toggle()
                                })
0 голосов
/ 27 марта 2020

хорошо, вот мой лучший ответ, спасибо за ваш код:

struct ChecklistView: View {
    var checklist: Checklist
    @State var currentProgress: Float = 0.0
    @State var checked = \[false, false, false, false\]


    var body: some View {
        ZStack(alignment: .leading) {

            //            RoundedRectangle(cornerRadius: 20)
            //                .foregroundColor(.red).opacity(0.5)
            //                .frame(width: 200)

            VStack {
                HStack(alignment: .top) {
                    checklist.image
                        .resizable()
                        .aspectRatio(contentMode: .fit)
                        .frame(width: 40, height: 40)
                        .padding(.trailing)
                    VStack(alignment: .leading) {
                        Text(checklist.title)
                            .font(.system(size: 16, weight: .medium))
                            .padding(.bottom, 4)

                        Text(checklist.instruction.uppercased()).font(.system(size: 12))

                        HStack {
                            ForEach(0 ..< checklist.steps) { index in
                                VStack {
                                    Button(action: {
                                        self.checked\[index\].toggle()
                                    }) {
                                        ZStack {

                                            RoundedRectangle(cornerRadius: 8)
                                                .foregroundColor(self.checked\[index\] ? Color("LightGreen") : .gray )
                                                .frame(width: 40, height: 40)

                                            Image(systemName: self.checked\[index\] ?  "checkmark" : "plus")
                                                .resizable()
                                                .aspectRatio(contentMode: .fit)
                                                .frame(width: 16, height: 16)
                                                .foregroundColor(self.checked\[index\] ? .white : .white)

                                        }
                                    }
                                }
                            }
                        }
                    }
                }.frame(width: 350, alignment: .leading)
            }
        }
        .frame(width: 350)
        .padding(.bottom, 16)
        .cornerRadius(8)
        .padding(.top, 20)
    }
}

// MARK: data checklist
struct Checklist: Identifiable, Hashable {

    func hash(into hasher: inout Hasher) {
        hasher.combine(id)
        hasher.combine(title)
    }

    var id = UUID().uuidString
    var title: String
    var instruction: String
    var image: Image
    var steps: Int
}



struct ContentView: View {

    let checklistData = \[
        Checklist(title: "Fruit", instruction: "1 vakje = 1 stuk of 100g", image: Image("kiwi"), steps: Int(4)),
        Checklist(title: "Fruit", instruction: "1 vakje = 1 stuk of 100g", image: Image("kiwi"), steps: Int(2))

    \]

    var body: some View {
        List(checklistData, id: \.self) { checkList in
            ChecklistView(checklist: checkList)
        }
    }
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...