首页 > 解决方案 > 如何使用 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)
    }

标签: iosswift

解决方案


您的相等运算符有问题:您在询问两个项目是否相同 - 如果它们相同,则检查它们中的某些内容是否不同:)

尝试使用一种方法搜索数组:如果您找到(并且您会)任何与案例匹配的项目,请继续您的工作。

像这样的东西:

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
    }
}

推荐阅读