Swift MVVM, как я могу реализовать Array для моделирования - PullRequest
0 голосов
/ 04 ноября 2019

Массив внутри модели Rss Feed и как я могу решить эту проблему? Я не могу получить данные с MVVM из JSON.

Ошибка: невозможно преобразовать значение типа '[Product]' в ожидаемый тип аргумента 'Product'

Извините за плохой английский.

Модель RSSFeed:

struct RSSFeed: Codable {
        var title: String?
        var description: String?
        var icon: String?
        var items: [Product]?
    }

Модель продукта:

struct Product: Codable {
    var id: String?
    var title: String?
    var specs: String?
    var size: [String]?
    var color: String?
    var link: String?
    var image: [String]?
    var price: Price
}

Модель продукта:

struct ProductViewModel {

    private var product: Product!

    init(product: Product) {
        self.product = product
    }

    var id: String {
        return product.id ?? ""
    }

    var title: String {
        return product.title ?? ""
    }

    var specs: String {
        return product.specs ?? ""
    }

    var size: [String] {
        return product.size ?? [""]
    }

    var link: String {
        return product.link ?? ""
    }

    var imageURL: [String] {
        return product?.image ?? [""]
    }

    var price: String {
        let rawValue = product.price.rawValue
        let currency = product.price.currency

        return "\(currency)\(rawValue)"
    }
}

Поставщик продукта (проблема здесь)

class ProductProvider {

    static let product = ProductProvider()

    private init() {

    }

    func getProduct() -> [ProductViewModel] {
        var rssFeed = RSSFeed()

        let jsonFile = Bundle.main.path(forResource: "products", ofType: "json")

        let data = try? Data(contentsOf: URL(fileURLWithPath: jsonFile!))
        do {
            rssFeed = try JSONDecoder().decode(RSSFeed.self, from: data!)

        } catch let error {
            print(error.localizedDescription)
        }

        if let product = (rssFeed.items) {
            return ProductViewModel(product: product)
//Error: Cannot convert value of type '[Product]' to expected argument type 'Product'
        }
        return [ProductViewModel]()
    }
}

Как я могу получить данные JSON?

1 Ответ

0 голосов
/ 04 ноября 2019

Измените предложение if на

if let items = rssFeed.items {
    return items.map {ProductViewModel(product: $0)}
}

Поскольку одна модель представления содержит один продукт, вам необходимо преобразовать массив items из Product в массив ProductViewModel, используя map функция

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