使用didSet通知时的问题

时间:2017-11-06 05:34:56

标签: ios swift didset

我有一个带图像的集合视图。每个集合视图项都有图像&与他们相关的其他数据,如'grand_total','product_id'等。现在每个集合视图项都有一个按钮&当我点击它时,与此相关的值如grand_total等应存储在字典数组中。

当我点击另一个集合视图项时,与其相关的值也将存储在字典数组中。所以最终如果我点击了2个集合视图项,那么与这2个集合视图项相关的所有值都将存储在一个字典数组中,如此...

[{"remaining_balance":"0.0","shipping_charges":0, "grand_total":320,"product_id”:”4”}, {"remaining_balance”:”1.0”,”shipping_charges”:200, "grand_total”:456,”product_id”:”5”}]

使用didSet这可以实现我的建议,但我将如何在这个我无法弄清楚的场景中使用didSet。我对事情不太熟练,因此问这个问题......:)

最后,当我发出我的API请求时,字典数组中的所有值都将作为参数传递,如此...

func APICallForDetails() {
    let url = "http://myapp/myUrl……”
    let headers = [ "Content-Type"...

    let parameters = [
            "access_token": self.accessToken,
            "seller_id": sellerIdvar,
            “order_data”: allMyData 
            "user_details": myUserDetails
        ]
    Alamofire.request(url, method: .post, parameters: Parameters, encoding: URLEncoding.httpBody, headers: headers)
        .responseJSON { (response) in
            if let httpResponse = response.response {
                    if httpResponse.statusCode == 200 {
                        print(“Something went wrong”)                                
                        }  else if result["success"] as! Int == 1 {
                            print(“SUCCESS!”) }}

parameters部分中,参数order_data的值为allMyDataallMyData应包含[{"remaining_balance":"0.0","shipping_charges":0, "grand_total":320,"product_id":"4"}]

2 个答案:

答案 0 :(得分:0)

假设您正在使用结构或类来显示collectionview中的数据。我想你的对象结构应该是这样的:

struct Product {
    let remainingBalance:String
    let shippingCharges:Int
    let grandTotal:Int
    let productId:String

    func toDictionary() -> [String:Any] {
        return ["remaining_balance":remainingBalance, "shipping_charges":shippingCharges, "grand_total": grandTotal, "product_id":productId]
    }
}

再次假设,你已经维护了一个对象数组,这些对象被点击在一个类似这样的数组中:

var clickedProducs:[Product] = []

现在,当您准备调用API时,您可以获得如下字典数组:

let arrayOfProductDict = clickedProducs.map({$0.toDictionary()})

我认为你根本不需要didSet

答案 1 :(得分:0)

" didSet"可以帮助你,以防万一你想要对数组allMyData的更改作出反应。您需要添加数据,例如{" remaining_balance":" 0.0"," shipping_charges":0," grand_total":320,&# 34; product_id":" 4"}以某种方式对数组:

@IBAction func addInfoAction(_ sender: NSButton) {

     allMyData.append(["remaining_balance":"0.0","shipping_charges":0, "grand_total":320,"product_id":"4"])
}

为避免数组allMyData中的双精度数,请考虑向订单词典添加一些唯一属性。 喜欢:

["orderID":12345,
 "remaining_balance":"0.0",
 "shipping_charges":0,
 "grand_total":320,
 "product_id":"4"]

在这种情况下,您将能够检查是否有关于要在阵列中添加的订单的信息,或者没有。然后决定只添加信息或更新。

可能更好地将您的属性allMyData组织为字典词典[String:[String:Any]]在这种情况下,如果您有订单ID,则只需使用订单ID将订单字典放入allMyData

allMyData[orderID] = ["orderID":12345, "remaining_balance":"0.0", "shipping_charges":0, "grand_total":320, "product_id":"4"]