将数据从数组中拉入交换机阵列

时间:2018-05-02 03:48:57

标签: arrays json swift switch-statement

我正在尝试使用来自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将大小转换为字符串,然后将其附加到数组?

3 个答案:

答案 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}}

}