Ios 从字典数组中删除

Ios 从字典数组中删除,ios,arrays,swift,dictionary,nsuserdefaults,Ios,Arrays,Swift,Dictionary,Nsuserdefaults,我使用UserDefualt保存字典数组: let pref = NSUserDefaults.standardUserDefaults(); var fav=pref.arrayForKey("favRecipes")!; fav.append(self.dict); pref.setObject(fav, forKey: "favRecipes"); 在保存另一个数据之前,我会检查它是否已经存在: @IBAction func addToFavorites(

我使用UserDefualt保存字典数组:

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上查找和搜索有关从字典中删除的内容,但没有任何帮助。

您必须更改数组
fav
,并将该数组写入userDefaults。默认情况下,没有具有key
\(id)
的对象,只有key
favRecipes
的数组,该数组依次包含key
id
的条目

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

@luk2302使用;没有错,也没有任何规则说我们不应该使用分号,即使很难,它在swift中也不起任何作用。这由程序员来决定。你可以试着回答问题或使用评论部分提供建议来找到解决方案,而不是粗鲁无礼。谢谢。@iamygish有编码标准,您不用
-这不客观-c@luk2302我同意必须遵循编码标准。你本可以告诉那个家伙用更好的方式使用它,你对分号的注释方式很粗鲁,这就是我想说的。是的,仅供参考,请查看苹果公司的文档——与其他许多语言不同,Swift不要求您在代码中的每个语句后都写分号(;),尽管您可以这样做,如果您愿意的话。由开发人员使用;你几乎可以在一行中编写整个程序,仅仅因为你可以,并不意味着你应该。@luk2302伙计,你想强加什么?标准是标准,不是规则,好吗?。我同意你的观点,一个好的开发人员应该遵循编码标准。我想说的是,在回答或评论时要尽量礼貌。别那么粗鲁。你明白了吗??请不要无礼。谢谢。谢谢,我只需要在Int中添加一个cast“id”就行了@很高兴认识HayAbados。我真的不知道你的
id
来自哪里。很乐意帮忙