SwiftUI: ForEach фильтры логические - PullRequest
0 голосов
/ 09 февраля 2020

Я отчаянно пытаюсь с ForEach отображать только то, что имеет значение true. Независимо от того, что я пытаюсь, также отображается false. Воздуха сейчас нет, и я думаю, что это так просто, что я просто не вижу этого. Вот фрагмент кода, к которому он должен применяться:

import SwiftUI

struct txt: Identifiable {
    var id: Int
    var text: String
    var show: Bool
}

struct ContentView: View {

    @State private var array = [
        txt(id: 000, text: "True", show: true),
        txt(id: 001, text: "True", show: true),
        txt(id: 002, text: "True", show: true),
        txt(id: 003, text: "False", show: false),
        ]

    var body: some View {
        NavigationView {
            List {
                ForEach(array.indices, id: \.self) { idx in
                   Text("\(self.array[idx].text)")
                }

            }
        }
    }
}

Ответы [ 2 ]

2 голосов
/ 09 февраля 2020

Измените ForEach так:

ForEach(array) { arr in
     if arr.show {
         Text("\(arr.text)")
     }
}
1 голос
/ 09 февраля 2020
List(array.filter { $0.show }){ (item) in
    Text(item.text)
}

ОБНОВЛЕНИЕ:

let ids = [0,2]
let filteredItems = array.filter { ids.contains($0.id)}

дает вам отфильтрованную коллекцию с только двумя элементами , где Element.id == 0 или Element.id == 2

array.filter {$ 0.show} - это коллекция из трех элементов , где Element.show == true

вы можете использовать его как источник данных

List(array.filter { ids.contains($0.id) }){ (item) in
    Text(item.text)
}

и он создаст один текст для каждой своей исходной коллекции

оба условия (или более) могут быть применены с любыми логическими операторами, как вы хотите

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