Тернарный оператор эмиссии SwiftUI - PullRequest
1 голос
/ 12 апреля 2020

Я использую троичный оператор в моем представлении swiftui, чтобы изменить цвет переднего плана элемента. При использовании этого в качестве кода все компилируется нормально:

Circle()
     .frame(width: 10, height: 10)
     .foregroundColor(item.amount < 10 ? Color.green : Color.red)

При использовании этого мой проект не собирается, процессор моего Ma c начинает зашкаливать, вентиляторы пинают в et c. Кто-нибудь знает, что не так?

Circle()
     .frame(width: 10, height: 10)
     .foregroundColor(item.amount < 10 ? Color.green : (item.amount < 100 ? Color.orange : Color.red))

Полный код:

struct ContentView: View {

    @ObservedObject var expenses = Expenses()
    @State private var showAddExpense = false

    var body: some View {
        NavigationView {
            List {
                ForEach (expenses.items) { item in
                    HStack {
                        VStack(alignment: .leading) {
                            Text(item.name)
                                .font(.headline)
                            Text(item.type)
                        }
                        Spacer()
                        Text("€\(item.amount)")
                        Circle()
                            .frame(width: 10, height: 10)
                            .foregroundColor(item.amount < 10 ? Color.green : (item.amount < 100 ? Color.orange : Color.red))
                    }
                }
                .onDelete(perform: removeItem)

            }
            .navigationBarTitle("iExpense")
            .navigationBarItems(leading: EditButton(), trailing:
                Button(action: {
                    self.showAddExpense = true
                }
                ) {
                    Image(systemName: "plus")
            })
        }
        .sheet(isPresented: $showAddExpense) {
            AddView(expenses: self.expenses)
        }

    }
    func removeItem(at index: IndexSet) {
        expenses.items.remove(atOffsets: index)
    }
}

Ошибка, отображаемая на модификаторе листа, но это правильно.

Error message

1 Ответ

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

Разбить конструкцию корпуса для более мелких компонентов, как показано ниже

ForEach (expenses.items) { item in
    self.listRow(for: item)  // << extract !!
}
.onDelete(perform: removeItem)

, скажем, для функции генератора частных строк

private func listRow(for item: Item) -> some View { // << your item type here
    HStack {
        VStack(alignment: .leading) {
            Text(item.name)
                .font(.headline)
            Text(item.type)
        }
        Spacer()
        Text("€\(item.amount)")
        Circle()
            .frame(width: 10, height: 10)
            .foregroundColor(item.amount < 10 ? Color.green : (item.amount < 100 ? Color.orange : Color.red))
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...