NSUserDefaults 检查键值是否存在
NSUserDefaults check if value exist for key
我有 UICollectionView
包含:UIlabel
和 UIButton
(标签中的文本来自 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")
}
我有 UICollectionView
包含:UIlabel
和 UIButton
(标签中的文本来自 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")
}