NSUserDefaults检查密钥是否存在值

时间:2018-04-27 17:52:35

标签: arrays swift nsuserdefaults

UICollectionView包含:UIlabelUIButton(标签中的文字来自API) enter image description here

当我按UIButton中的UIlabel文本和存储在UserDefaults.standard.array中的CostLbl(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”),如果不是 - 可以存储密钥,如果文本已经存在array(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'

如何改变?

1 个答案:

答案 0 :(得分:1)

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

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

读取数组,检查数组是否包含值,如果NO附加项目并保存数组,如果YES不执行任何操作

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