SwiftUI List «Generi c параметр 'S' не может быть выведен» - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь показать список SwiftUI и получить ошибку: «Generi c параметр 'S' не может быть выведен». Я попытался изменить его на ForEach, но получить ту же ошибку в ForEach. Расположение ошибки есть комментарий ниже.

import SwiftUI
import Combine

@available(iOS 13.3, *)
struct MyCustomerListView: View {
    @ObservedObject var custObservable: CustomersObservable = CustomersObservable()

    init()
    {
        UITableView.appearance().tableHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: 0, height: Double.leastNonzeroMagnitude))
    }

    var body: some View {
        List(custObservable.customers) { cust in  //  <-- Error is here on List
            NavigationLink(destination: MultipleSignatureView(customer: cust)) {
                Text(cust.companyName)
            }
        }.listStyle(GroupedListStyle())
    }
}

@available(iOS 13.3, *)
class CustomersObservable: ObservableObject {
    @Published var customers: [Cust] = [Cust]()

    init() {
        customers.append(contentsOf: [
            Cust(id: "u", companyName: "Uinta"),
            Cust(id: "v", companyName: "victor"),
            Cust(id: "w", companyName: "wasden")
        ])
    }
}

@available(iOS 13.3, *)
class Cust: Identifiable {
    var id: String
    var companyName: String

    init(id: String, companyName: String) {
        self.id = id
        self.companyName = companyName
    }
}

Что бы это могло быть? Заранее спасибо.

1 Ответ

0 голосов
/ 24 марта 2020

Я наконец понял это. Ошибка была совсем не интуитивной. Моя проблема была в этом коде:

NavigationLink(destination: MultipleSignatureView(customer: cust)) { // <-- wrong type passed
    Text(cust.companyName)
}

Мой класс MultipleSignatureView принял String вместо объекта Cust. Как только я внес изменение в свой конструктор MultipleSignatureView, позволив ему получать объект Cust, все заработало.

Спасибо тем, кто прокомментировал. Оглядываясь назад, очевидно, что, поскольку код, который я разместил, скомпилирован в других системах, мой вопрос должен был включать в себя мой связанный объект. В случае, если у кого-то возникла аналогичная проблема, я предоставлю свой код до и после:

До:

import SwiftUI

@available(iOS 13.3, *)
struct MultipleSignatureView: View {
    var customer: String     // <-- It was choking here. Cust object was being passed
    var body: some View {
        Text(customer)
    }
}

После:

import SwiftUI

@available(iOS 13.3, *)
struct MultipleSignatureView: View {
    var customer: Cust               // <-- Now it takes a Cust object
    var body: some View {
        Text(customer.companyName)
    }
}
...