如何使用Swift替换字典特定键值

时间:2019-09-17 18:04:39

标签: ios swift

我正在实现按钮单击,以像Tag 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)
            }
        }
}

第一个ViewController

@IBAction func saveAction(_ sender: Any) {
        let tag = TagModel(tagId: 0, tagName: "test", tagStoreKey: "a")
        tag.save()
        self.dismiss(animated: true, completion: nil)
    }

1 个答案:

答案 0 :(得分:1)

相等运算符不对劲:您要问两个项目是否相同-如果它们相同,请检查其中是否有所不同:)

尝试使用 first 方法搜索数组:如果找到(并且将会)与大小写匹配的任何项目,则继续您的工作。

类似这样的东西:

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