Проблема в уведомлении с помощью didSet

У меня есть представление коллекции с изображениями. У каждого элемента представления коллекции есть изображение и другие данные, связанные с ними, такие как 'grand_total', 'product_id' и т. Д. Теперь у каждого элемента представления коллекции есть кнопка, и когда я нажимаю на нее, значения, такие как grand_total и т. Д., Связанные с этим, должны сохраняться. в массиве словаря.

И когда я нажимаю на другой элемент представления коллекции, значения, связанные с ним, также будут сохранены в массиве словаря. Таким образом, в конечном итоге, если бы я щелкнул 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 имеет значение allMyData а также allMyData должен содержать [{"remaining_balance":"0.0","shipping_charges":0, "grand_total":320,"product_id":"4"}]

2 ответа

"didSet" может помочь вам на всякий случай, когда вы захотите среагировать на изменение массива allMyData. Вам необходимо добавить в массив данные, например, {"Остаток_баланса":"0.0","shipping_charges":0, "grand_total":320,"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]] В этом случае, если у вас есть идентификатор заказа, вы просто помещаете свой словарь заказа в allMyData, используя идентификатор заказа

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

Предполагается, что вы используете структуру или класс для отображения данных в виде коллекции. Я думаю, что ваша структура объекта должна выглядеть примерно так:

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 совсем.

Другие вопросы по тегам