Swiftui, кажется, не работает правильно с Cocoapods и Firebase - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь создать приложение для iOS, используя SwiftUI. Мои данные хранятся в базе данных Google Firebase в реальном времени. Я извлекаю свои данные в ObservableObject, чтобы пользовательский интерфейс мог загружаться динамически, если данные добавляются или удаляются. Но по какой-то причине я всегда получаю ошибку «Тип выражения неоднозначен без дополнительного контекста» для Text ().

Я уже пытался удалить операторы if и Text (), но тогда яЯ получаю ошибки в других местах. Например, мне также нужно написать

HStack{ ... }.padding(.leading, CGFloat(20))

. Если я не приведу 20 к CGFloat, я получаю ошибку "CGFloat не конвертируется в CGFloat?". Я знаю, что сообщения об ошибках SwiftUI пока не так хороши, так как почти 90% ошибок кода приводят к некоторым неоднозначным ошибкам бла. Но здесь я действительно не знаю, откуда эти ошибки.

import SwiftUI

struct IngredientsTab: View {

    @ObservedObject var ingredientsVM: IngredientViewModel = IngredientViewModel()

    var body: some View {

        NavigationView {
            List {
                ForEach(ingredientsVM.ingredients, id: \.self){ (ingredient) in
                    NavigationLink(destination: IngredientDetailView(ingredient: ingredient)){
                        VStack {
                            HStack {
                                Text(ingredient.name)
                                Spacer()

                                if (Type.NONALC == ingredient.type) {
                                    self.modifier(LabelViewModifier(label: "Non-alcoholic", backgroundColor: .green))
                                } else {
                                    self.modifier(LabelViewModifier(label: "Alcoholic", backgroundColor: .red))
                                }
                            }

                            if (ingredient.pieceGood) {

                                HStack {
                                    Image(systemName: "checkmark.circle.fill")
                                        .foregroundColor(Color.green)
                                    Text("Piece good") // Here I'm getting the error
                                    Spacer()
                                }
                                .padding(.leading, 20)
                            }
                        }
                    }
                }
            }
        }
    }
}

Так что, похоже, это как-то связано с SwiftUI (поскольку он, очевидно, еще не работает идеально), но также с Cocoapods / Firebase. В другом проекте у меня похожий подход, но без использования каких-либо модулей, и он просто отлично работает.

1 Ответ

1 голос
/ 30 октября 2019

Я наконец нашел проблему. Мой Ингредиент унаследован от Идентифицируемого, но также от NSObject. В сочетании с каким-то неисправным конструктором и запись

id: \.self

в цикле ForEach привела к этому странному поведению. Я обновил свой Ингредиент до нужной модели и удалил указанную выше строку из цикла ForEach, после чего он заработал.

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

PS: Он не связан ни с какими модулями, ни с модулями. в Firebase;)

...