Проблема в уведомлении с помощью 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
совсем.