Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json Swift MVVM如何实现阵列到模型_Json_Swift_Mvvm - Fatal编程技术网

Json Swift MVVM如何实现阵列到模型

Json Swift MVVM如何实现阵列到模型,json,swift,mvvm,Json,Swift,Mvvm,Rss提要模型中的数组以及如何解决此问题?我无法使用MVVM从JSON获取数据 错误:无法将“[Product]”类型的值转换为预期的参数类型“Product” 我很抱歉英语不好 RSSFeed型号: 产品型号: 产品视图模型: 产品供应商(问题在这里) 如何获取JSON数据 将if子句更改为 if let items = rssFeed.items { return items.map {ProductViewModel(product: $0)} } 由于一个视图模型包含一个产品,

Rss提要模型中的数组以及如何解决此问题?我无法使用MVVM从JSON获取数据

错误:无法将“[Product]”类型的值转换为预期的参数类型“Product”

我很抱歉英语不好

RSSFeed型号:

产品型号:

产品视图模型:

产品供应商(问题在这里)


如何获取JSON数据

if
子句更改为

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

由于一个视图模型包含一个产品,您需要使用
map
函数将
product
items
数组转换为
ProductViewModel
数组,您是否也将
Price
定义为可编码的?
产品的每个元素都必须是可编码的是,先生。价格是可编码的
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]()
    }
}
if let items = rssFeed.items {
    return items.map {ProductViewModel(product: $0)}
}