Swift MVVM我如何实现数组建模

Rss Feed模型中的数组,如何解决此问题?我无法从JSON使用MVVM获取数据。

错误:无法将类型“ [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数据?

ajiaolong 回答:Swift MVVM我如何实现数组建模

if子句更改为

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

由于一个视图模型包含一种产品,因此您需要使用items函数将Product的{​​{1}}数组转换为ProductViewModel的数组

本文链接:https://www.f2er.com/3164593.html

大家都在问