我UICollectionView
包含:UIlabel
和UIButton
(标签中的文字来自API)
当我按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'
如何改变?
答案 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")
}