Получение ошибки «Невозможно определить тип возвращаемого значения сложного замыкания; добавить явный тип для устранения неоднозначности» при попытке воссоздать демонстрационную версию SwiftUI List - PullRequest
1 голос
/ 14 июня 2019

Я пытаюсь воссоздать демонстрацию SwiftUI с той разницей, что я хочу использовать свой собственный объект Item.

Позиция:

class Item {

    var company: String = ""
    var item_class: String = ""
    var name: String = ""
    var stock: Int = 0
    var average_cost: Decimal = 0.00
    var otc_price: Decimal = 0.00
    var dealer_price: Decimal = 0.00
    var ctc_price: Decimal = 0.00

    class var _API_LIST_EP: String {return "api/inventory/items/"}

    // Init and Funcs
    // JToken is an extended typealias for [String : Any] that makes parsing easier
    required init(_ jt: JToken) {
        company = jt.string(forKey: "company")
        item_class = jt.string(forKey: "item_class")
        name = jt.string(forKey: "name")
        stock = jt.int(forKey: "stock")
        average_cost = jt.decimal(forKey: "average_cost")
        otc_price = jt.decimal(forKey: "otc_price")
        dealer_price = jt.decimal(forKey: "dealer_price")
        ctc_price = jt.decimal(forKey: "ctc_price")
    }

}

В аналогичном вопросе было отмечено, что проблема возникла из-за того, что одна из переменных объекта инициализировалась в неоднозначном состоянии, однако после заполнения всех переменных моего объекта она все еще возникает

Код проблемы:

struct ContentView : View {

    var itemList: [Item] = []
    var body: some View {
        List(itemList) { item in
            Image(systemName: "photo")
            VStack(alignment: .leading) {
                Text(item.name)
                Text(item.company)
                .font(.subheadline)
                .color(.gray)
            }
        }
    }
}

Скриншот ошибки:

Error Code

1 Ответ

4 голосов
/ 14 июня 2019

Сообщение об ошибке вводит в заблуждение.

List(itemList) { item in ... }

требует, чтобы тип элемента itemList соответствовал протоколу Identifiable. Для классов (как в вашем случае) достаточно объявить соответствие протокола

class Item: Identifiable {
   // ...
}

потому что есть реализация по умолчанию (на основе идентификатора объекта).

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