NSUserDefaults 检查键值是否存在

NSUserDefaults check if value exist for key

我有 UICollectionView 包含:UIlabelUIButton(标签中的文本来自 API)

当我按下 UIButton 来自 UIlabel 的文本并且 CostLbl 存储在 UserDefaults.standard.array(forKey: "car")

let imageData = UIImageJPEGRepresentation(image.image!, 1.0) as NSData? 
let newValues = ["name": self.nameLbl.text ?? "", "price": self.costLbl.text ?? "", "image": imageData]

var mArray = UserDefaults.standard.array(forKey: "car") as? [[String: Any]]
 maAr?.append(newValues)

问题:当按下 UIButton 时,需要检查 UIlabel 中的文本是否在数组中(forKey:"car"),如果不在,则可以存储键,并且如果文本已经在数组中(forKey:"car")无法添加到数组

我按照vadian的建议写的

var maAr = UserDefaults.standard.array(forKey: "car") as? [[String: Any]] ?? [] 
if !maAr.contains(where: newValues) { 
maAr.append(newValues) 
def.set(maAr, forKey: "car") 
}

但发现错误 (where: newValues) -

Cannot convert value of type '[String : Any]' to expected argument type '([String : Any]) throws -> Bool'

如何更改?

首先将字典声明为 [String:String] 在这种情况下没有类型转换也没有注释。

let newValues = ["name": nameLbl.text ?? "", "price": costLbl.text ?? ""]

读取数组,检查数组是否包含该值,如果没有则追加该项目并将数组存回,如果是什么都不做

var carArray = UserDefaults.standard.array(forKey: "car") as? [[String: String]] ?? []
if !carArray.contains(newValues) {
   carArray.append(newValues)
   UserDefaults.standard.set(carArray, forKey: "car")
}