从字典数组中删除

时间:2015-12-13 17:19:22

标签: ios arrays swift dictionary nsuserdefaults

我使用UserDefualt来保存Dictionary的数组:

let pref = NSUserDefaults.standardUserDefaults();
var fav=pref.arrayForKey("favRecipes")!;
        fav.append(self.dict);
        pref.setObject(fav, forKey: "favRecipes");

在我保存另一个数据之前,我检查它是否已经存在:

@IBAction func addToFavorites(sender: UIButton) {
    //not exist
    if !isFavorite(){
        var fav=pref.arrayForKey("favRecipes")!;
        fav.append(self.dict);
        pref.setObject(fav, forKey: "favRecipes");
        print("added");
    } //exist
    else{
        ;
    }
}
private func isFavorite()->Bool{
    var fav=pref.arrayForKey("favRecipes")!;
    for r in fav{
        if r["id"]! as! Int==id{
            return true;
        }
    }
    return false;
}

此代码的目的是在收藏夹列表中添加内容,如果已经存在,则可以选择将其删除。 由于某种原因,我没有成功完成最后一部分。

到目前为止,这是我的尝试:

 func remove(event:UIAlertAction!){
        var fav=pref.arrayForKey("favRecipes")!;

        for r in fav{
            if r["id"]! as! Int==id{
               pref.removeObjectForKey("\(id)");
                //pref.synchronize();
                //fav=pref.arrayForKey("favRecipes")!;
                //print(r["id"] as! Int);

            }
        }
    }

当然我试图查看并搜索有关从userDefualt中删除字典但没有任何帮助。

1 个答案:

答案 0 :(得分:1)

您必须更改数组fav并将该数组写回userDefaults。默认情况下,密钥\(id)没有对象,只有密钥favRecipes的数组,后者又包含密钥id的条目。

func remove(event:UIAlertAction!){
    var fav = pref.arrayForKey("favRecipes")!
    fav = fav.filter { $0["id"] != id }
    pref.setObject(fav, forKey: "favRecipes")
}