Как удалить элемент в словаре, используя фильтр в iOS Swift - PullRequest
0 голосов
/ 15 марта 2020

У меня есть словарь, который выглядит следующим образом, я хочу удалить * все элементы, которые содержат stock = 0.

    variations =     {
    "64FB5468-96E9-41A4-A779-3FB57FF1296B" =         {
        price = 10;
        sku = 123456;
        stock = 1;
        volume = 1L;
    };
    "A5EDB714-3D39-42DA-9A5C-2392D39C3AEB" =         {
        price = 20;
        sku = 254648;
        stock = 0;
        volume = 2L;
    };
    "BCA98B51-B058-4ABE-9010-54B080B819FB" =         {
        price = 30;
        sku = 284964;
        stock = 0;
        volume = 3L;
    };
};

Я использовал приведенный ниже код, однако он возвращает найденный ноль при ошибке развертывания. Как правильно удалить словарь с 0 запасами внутри словаря вариаций? kSTOCK является константой для строки "stock"

    let filterAllItems = self.allItems.filter({(($0.variations as AnyObject)[$0] as! [String:Any])[kSTOCK] as! Int > 0})

1 Ответ

1 голос
/ 15 марта 2020

Предполагая, что allItems является словарем [String:Any], создайте (изменяемую) копию variations, отфильтруйте объекты, удалите значения найденных ключей и переназначьте словарь на allItems

if var variations = allItems["variations"] as? [String:[String:Any]] {
    let allItemsWithStock0 = variations.filter({($0.value["stock"] as? Int) == 0})
    for (key, _) in allItemsWithStock0 {
        variations.removeValue(forKey: key)
    }
    allItems["variations"] = variations
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...