我有以下模型结构:
enum ProductSectionType {
case ProductDetails
case ProductPricing
}
enum Item {
case Brand
case Collection
case Dimensions
case SoldBy
case Category
case Pricing
}
struct ProductSection {
var type: ProductSectionType
var items: [Item]
}
问题是,枚举项中的定价实际上是一个数组。这是我从后端返回的数据:
Product(productCode: "SomeCode",
productBrand: "SomeBrand",
productCategory: "SomeCategory",
productDimensions: "SomeDimensions",
productCollection: "Some Collection",
productSoldBy: "??",
productPricing: ["X-Price = 100", "Y-Price = 200"]))
在viewDidLoad
我有:
sections =
[ProductSection(type: .ProductDetails,
items: [.Brand, .Collection, .Category, .Dimensions, .SoldBy]),
ProductSection(type: .ProductPricing,
items: [.Pricing])]
在UITableViewDataSource
我有:
func numberOfSections(in tableView: UITableView) -> Int {
return sections.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sections[section].items.count
}
如何将定价作为动态数组推广到viewDidLoad
& UITableViewDataSource
?
更新
以下是我的产品型号我删除了其他字段:
struct Product {
let productPricing: [String]
etc.......
var dictionary: [String : Any] {
return [
etc.......
"Pricing": productPricing
]
}
}
extension Product: DocumentSerializable {
init?(dictionary: [String : Any]) {
guard let productCode = dictionary["Code"] as? String,
etc......
let productPricing = dictionary["Pricing"] as? [String]
else { return nil }
self.init(productCode: productCode,
etc......
productPricing: productPricing)
}
}
我只在一个部分中有5个静态单元格,而我有第二个部分包含动态单元格。这是对这些数据进行建模的最佳方法?我应该放弃上面的方法吗?
答案 0 :(得分:0)
创建一个结构来容纳api响应。
struct Product: Codable {
var productCode: String
var productCategory: String
...
var productPrice: [String] // or a other struct if only x and y prices are there.
var productPrice: PPrice
}
struct PPrice {
var XPrice: String
var YPrice: String
}
通过使associated value
的项目枚举接受回复。
enum Item {
case Brand(String)
case Collection(String)
...
case Pricing([String]) or Pricing(PPrice) // in case of only x and y
}
现在有部分
extension Product {
var detailsItems: [Item] {
return [.Brand(self.productBrand),
.Collection(self.productCollection),...]
}
var priceItems: [Item] {
return self.productPrice.map{.Price($0)}
or
return [.Price(self.productPrice.XPrice),
.Price(self.productPrice.YPrice)]
}
}
这是Swift枚举与关联类型的一个很好的例子,因为它们是与案例绑定的单个类型。
这也为tableView - collectionView数据源中的单个类型的单元格添加了更安全,更清晰的方法。