Не удалось устранить ошибку «Тип выражения неоднозначен без дополнительного контекста». Может кто-нибудь проверить мой код? - PullRequest
0 голосов
/ 31 января 2020

Я относительно новичок в SwiftUI и время от времени получаю ошибки и решаю их путем поиска по inte rnet, но на этот раз я не смог найти решения своей проблемы и решил обратиться за помощью сюда, стек переполнение. Я надеюсь, что код ниже поможет вам найти мою проблему.

Обе мои структуры являются Идентифицируемыми, и я фактически использовал структуру ShoppingList в одном и том же представлении, чтобы создать его Список с использованием той же техники, и она работает без ошибок. Но когда я пытаюсь использовать ForEach для переменной структуры ShoppingList (которая также является структурой и соответствует протоколу Identifiable), я получаю эту ошибку «Тип выражения неоднозначен без дополнительного контекста»

Это вид, что я получаю свою ошибку:

struct ListDetailView: View {
    @EnvironmentObject var session: SessionStore
    var item: ShoppingList
    @State private var isAddNewViewActive: Bool = false

    var body: some View {
        List {
            Section(header: Text("Products")) {
                ForEach(self.item.products, id: \.id) { product in <<<--- ERROR LINE
                        Text(product.name)
                    }
            }
            Section(header: Text("")) {
                Button(action: { self.isAddNewViewActive.toggle() } ) {
                    Text("Click to add new product")
                }
            }
        }
        .listStyle(GroupedListStyle())
        .navigationBarTitle(self.item.name)
        .sheet(isPresented: $isAddNewViewActive) {
            AddNewItemView(session: self.session, item: self.item, isViewActive: self.$isAddNewViewActive)
        }
    }
}

Это структуры, которые находятся в коде

struct ShoppingList: Identifiable, Equatable {
    var id: UUID
    var name: String
    var coverPhoto: String
    var products: [Product]

    init(id: UUID = UUID(), name: String, coverPhoto: String = "cart", products: [Product] = [Product]()) {
        self.id = id
        self.name = name
        self.coverPhoto = coverPhoto
        self.products = products
    }

    mutating func addProduct(product: Product) {
        products.append(product)
        print(products)
    }

}

struct Product: Identifiable, Equatable {
    var id: UUID
    var name: String
    var brand: String
    var imageURL: String
    var links: [Int: String]
    var description: String

    init(id: UUID = UUID(), name: String, brand: String = "", imageURL: String = "", links: [Int: String] = [:], description: String = "") {
        self.id = id
        self.name = name
        self.brand = brand
        self.imageURL = imageURL
        self.description = description
        self.links = links
    }
}

Заранее спасибо всем StackOverflow сообщество.

Ответы [ 2 ]

0 голосов
/ 31 января 2020

По-видимому, произошла ошибка в совершенно не связанной части фрагмента кода, которую я разместил здесь (просмотр листа, который появляется, когда я нажимаю кнопку «Просмотр» с ошибкой), и это вызывало ошибку: /

Код, который я разместил здесь, отлично работает.

0 голосов
/ 31 января 2020

я правильно соответствую протоколу Equatable

struct ShoppingList: Identifiable, Equatable {
        static func == (lhs: ShoppingList, rhs: ShoppingList) -> Bool {
            return lhs.id == rhs.id && rhs.id == lhs.id
        }
        var id: UUID()
        ...
        init(name: String, brand: String = "", imageURL: String = "", links: [Int: String] = [:], description: String = "") {
            ...
        }
    }

нет необходимости инициализировать UUID, UUID () будет сам генерировать

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