我正在尝试使用来自JSON数组的数据填充我的选择器视图。数组以数字形式提取数据但是,我需要String等价物。我认为最好的方法是使用Switch / Case语句来获取数据并将其放入String形式。从那里我想将String附加到一个数组。我不确定如何将它添加到此功能。
这是从函数中提取的数据:
tempProducts [{
"product_id" : 27,
"size" : 4,
"id" : 45,
"price" : 180
}, {
"product_id" : 27,
"size" : 3,
"id" : 44,
"price" : 90
}, {
"product_id" : 27,
"size" : 2,
"id" : 43,
"price" : 45
}]
这是功能:
func loadSizes() {
Helpers.showActivityIndicator(activityIndicator, view)
if let productId = product!.id {
APIManager.shared.getProductsize(productId: productId, completionHandler: { (json) in
print("API Print", json)
if json != nil {
self.prodSize = []
//product_size is the name of the array that is passed (name of field in postman)
if let tempProducts = json["product_size"].array {
for item in tempProducts {
let prodPrice = ProductSize(json: item)
self.prodSize.append(prodPrice)
}
print("tempProducts", tempProducts)
print("Prod Price", self.prodSize)
self.pricePicker.reloadAllComponents()
Helpers.hideActivityIndicator(self.activityIndicator)
}
}
})
}
}
ProductSize类:
class ProductSize {
//Label for product information
var price:Float?
var sizeId: Int?
var size: Int?
var product_id: Int?
init(json: JSON) {
self.price = json["price"].float
self.sizeId = json["id"].int
self.size = json["size"].int
self.product_id = json["product_id"].int
}
}
如何使用Case / Switch将大小转换为字符串,然后将其附加到数组?
答案 0 :(得分:1)
无需创建数组,因为您拥有ProductSize数组
func pickerView(_ pickerView: UIPickerView,titleForRow row: Int,forComponent component: Int) -> String? {
let item = self.prodSize[row]
return getCategory(value:(item.size)!)
}
//
override func viewDidLoad() {
super.viewDidLoad()
let sizes = [34,99,200]
let result = sizes.map{getCategory(value: $0)}
print(result)
}
func getCategory (value:Int) -> String {
switch value {
case 0...50 : return "Small"
case 51...100 : return "Medium"
case 101...1000 : return "Large"
default:
return ""
}
}
答案 1 :(得分:1)
首先,你不需要一个类,一个结构就足够了,因为JSON总是包含所有字段,所有成员都声明为非可选
要获取大小的字符串值,请添加计算属性
struct ProductSize {
//Label for product information
var price : Float
var sizeId : Int
var size : Int
var productId : Int
init(json: JSON) {
self.price = json["price"].floatValue
self.sizeId = json["id"].intValue
self.size = json["size"].intValue
self.productId = json["product_id"].intValue
}
var sizeDescription : String {
switch size {
case 2: return "small"
case 3: return "medium"
case 4: return "large"
default: return "unknown"
}
}
}
然后返回
return self.prodSize[row].sizeDescription
titleForRow:forComponent:
中的
如果有更多尺寸使用数组
var sizeDescription : String {
let sizeArray = ["micro", "mini", "small", "medium", "large", "XL", "XXL"]
return size < sizeArray.count ? sizeArray[size] : "unknown"
}
答案 2 :(得分:1)
@vadian发布的使用辅助函数的解决方案略有不同。如果我正确理解你的问题,那么可以使用一个简单的辅助函数来添加计算出的String值。这样的东西应该有用(没有测试过)。
{{1}}
}