Json Swift MVVM如何实现阵列到模型
Rss提要模型中的数组以及如何解决此问题?我无法使用MVVM从JSON获取数据 错误:无法将“[Product]”类型的值转换为预期的参数类型“Product” 我很抱歉英语不好 RSSFeed型号: 产品型号: 产品视图模型: 产品供应商(问题在这里)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)} } 由于一个视图模型包含一个产品,
如何获取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)}
}