Удаление данных из массива по нажатию кнопки переключения в swiftui - PullRequest
1 голос
/ 11 апреля 2020

У меня есть массив из целого числа, представляющего некоторую кнопку переключения. Я хочу удалить целое число из массива в соответствии с выключенной кнопкой переключения!

    struct CleanData: View {

    var numberArray = [101, 102, 109, 143]
    @State var numToDelete: [Bool] = [true, true, true, true]


    var body: some View {

        ForEach(0 ..< numberArray.count) {
            if !self.numToDelete[$0] {
                numberArray.remove(at: $0)
                //to save modified array permanently
            }
        }

        return ForEach(0 ..< numberArray.count) {

            Toggle("Days: \(self.numberArray[$0])", isOn: self.$numToDelete[$0])
                .padding()

        }
    }
}

Или попытаться по-другому, но не повезло!

struct CleanData: View {

    var numberArray = [101, 102, 109, 143]

    var body: some View {
        return ForEach(0 ..< numberArray.count) { num in
            RowView(mID: num, numArray: self.numberArray)
        }
    }
}


struct RowView: View {

    @State var isShow = true

    var mID: Int
    var numArray: [Int]

    var body: some View {

        if(!isShow) {
            numArray.remove(at: mID)
            //to save modified array permanently
        }

        return Toggle("Days: \(self.numArray[mID])", isOn: self.$isShow)
            .padding()
    }
}

1 Ответ

1 голос
/ 11 апреля 2020

Здесь возможен подход

demo

struct CleanData: View {

    @State private var numberArray = [101, 102, 109, 143]
    @State private var numToDelete = [true, true, true, true]

    var body: some View {
        VStack {
            ForEach(Array(numberArray.enumerated()), id: \.element.self) { (i, number) -> AnyView in
                let toDelete = Binding<Bool>(get: { self.numToDelete[i] },
                    set: {
                        self.numToDelete[i] = $0

                        // delayed to give time for toggle animation
                        DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
                            self.numberArray.remove(at: i)
                            self.numToDelete.remove(at: i)
                        }
                    }
                )
                return AnyView(Toggle("Days: \(number)", isOn: toDelete))
            }
        }.padding()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...