ios - 如何使用 Swift 替换字典的特定键值
问题描述
我正在实现按钮单击以像标签 UI 一样添加 CollectionView Cell。在这里,我创建了 TagModel 类,用于维护 TagId 并在每次使用时验证标签数据是否可用if items.contains(tag) == false {….}
(这将避免重复到集合视图中)。现在,我需要再添加一个验证,if items.contains(tag) == true
需要检查 tagName 和当前选择的值是否相同。如果不一样,我需要替换该标签值。如何做到这一点?
标签验证码
func tagValidation(){
// Validate A
if let aValue = UserDefaults.standard.object(forKey: "a") as? [String:Any] {
let tag = TagModel(dict: aValue)
if items.contains(tag) == false { // how to check if true need to validate current value and already exists values are same. if same no need to replace or else need to replace value
items.append(tag)
}
}
}
第一个视图控制器
@IBAction func saveAction(_ sender: Any) {
let tag = TagModel(tagId: 0, tagName: "test", tagStoreKey: "a")
tag.save()
self.dismiss(animated: true, completion: nil)
}
解决方案
您的相等运算符有问题:您在询问两个项目是否相同 - 如果它们相同,则检查它们中的某些内容是否不同:)
尝试使用第一种方法搜索数组:如果您找到(并且您会)任何与案例匹配的项目,请继续您的工作。
像这样的东西:
if let aValue = UserDefaults.standard.object(forKey: "a") as? [String:Any] {
let tag = TagModel(dict: aValue)
if items.contains(tag) == false {
items.append(tag)
} else if let existing = items.first(where: { $0 == tag}), existing.tagName != tag.tagName {
// replace item
let index = items.firstIndex(of: tag)!
items[index] = tag
}
}
推荐阅读
- javascript - 活动状态不适用于第一次访问
- asp.net-core-3.0 - 我有一个实体,我需要添加实体类型的属性
- django - Django更改使用内联时调用pre_save post_save信号的顺序?
- php - 如果所有数组的逻辑相同,如何避免重复 foreach?
- ios - Swift 的 UIPageControl
- apache-spark-mllib - Spark ML CountVectorizer 输出说明
- c# - 访问新保存对象上的 ID 时 MongoDB C# 驱动程序 InvalidOperationException
- svg - scale SVG pathPoints
- discord - JavaScript 不工作 意外的语法错误
- drools - Drools 将不同数据类型列表传递给 drl 文件