Swift MVVM如何实现Array来建模



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

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

if子句更改为

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

由于一个视图模型包含一个产品,因此需要使用map函数将Productitems数组转换为ProductViewModel数组

最新更新