arrays - NSUserDefaults 检查键的值是否存在
问题描述
我有UICollectionView
包含:UIlabel
和UIButton
(标签中的文本来自 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'
这怎么能改变?
解决方案
首先声明字典,因为[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")
}
推荐阅读
- java - Java Microstream - ImmutablePair 导致 PersistenceExceptionTypeNotPersistable
- node.js - NodeJS:从公共 Tableau 表中获取数据
- c# - 尝试加载到字符串时出现一些奇怪的 XML 问题
- python - 在另一个图像上匹配轮廓或绘制 (png) 轮廓
- java - 有没有办法使用 EasyMock/PowerMock 测试 JUnit 测试中从不使用默认时区?
- grep - grep 输入文件中的确切单词
- r - 使用列表元素的名称向列表中的每个数据框添加一列
- flutter - 在按钮内拉伸边框
- openmdao - 在 Openmdao 中使用 ExternalCodeComp 的问题
- mysql - ShellSript 中的 MySql RegexP 正在中断