SwiftUI Объединение двух ObservedObjects из двух разных массивов - PullRequest
2 голосов
/ 12 апреля 2020

Я пытаюсь объединить два объекта из следующих типов

@ObservedObject var expenses = Expense()
@ObservedObject var recipes = Recipe()

Массивы работали довольно хорошо, и все в порядке.

Теперь я хотел бы представить все элементы из массивов в ForEach.

    var body: some View {
    TabView {
        NavigationView {
            List {
                ForEach(Array(zip(expenses.items, recipes.ReItems)),id: \.0){ item in
                    HStack{
                        VStack(alignment: .leading){
                            Text(item.beschreibung)
                                .font(.headline)
                            Text(String(item.menge) + " \(item.unitType)")
                        }
                    }
                }
                .onDelete(perform: removeItems)
            }

Но это выдает ошибку - «Компилятор не может проверить это выражение в разумное время ; попробуйте разбить выражение на отдельные подвыражения "

Моя первая идея состояла в том, чтобы сохранить массивы в переменной, как в этом сообщении stackoverflow Компилятор не может проверить это выражение в разумные сроки ; попробуйте разбить выражение на отдельные подвыражения

@State private var arrayExpense = self.expenses.items
@State private var arrayRecipes = self.recipes.ReItems

Но, чтобы быть честным, это выглядит нехорошо .. Это также вызывает исключение; o

Спасибо за вашу помощь !

Ответы [ 2 ]

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

Попробуйте разбить его на части, как показано ниже (это дает компиляторам явный результат проверки типа zip)

var body: some View {
    TabView {
        NavigationView {
            List {
              self.listContent(items: Array(zip(expenses.items, recipes.ReItems)))
            }
    ...


private func listContent(items: [Item]) -> some View {
    ForEach(items, id: \.0){ item in
        HStack{
            VStack(alignment: .leading){
                Text(item.beschreibung)
                    .font(.headline)
                Text(String(item.menge) + " \(item.unitType)")
            }
        }
    }
    .onDelete(perform: removeItems)
}
0 голосов
/ 12 апреля 2020

, если текст будет:

Text(item.0.beschreibung).font(.headline)
Text(String(item.0.menge) + " \(item.0.unitType)")

или с п. 1 в зависимости от обстоятельств.

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