首页 > 解决方案 > NSUserDefaults 检查键的值是否存在

问题描述

我有UICollectionView包含:UIlabelUIButton(标签中的文本来自 API) 在此处输入图像描述

当我按下 存储在 UserDefaults.standard.array(forKey: "car") 中的UIButton文本和 CostLblUIlabel

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'

这怎么能改变?

标签: arraysswiftnsuserdefaults

解决方案


首先声明字典,因为[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")
}

推荐阅读