ios - 字典中的 swift 行动不可预测

标签 ios swift dictionary

我在字典参数中有一组参数:[String: Any]。 此外,我有一些此类参数,我的应用程序需要存储它们并在按下按钮时切换每个参数。

代码:

var filterParameters: [String: Any] = [:]
var countryFilterParameters: [String: Any] = [:]

@IBAction func segmentHasChanged(_ sender: Any) {
    if let segment = sender as? UISegmentedControl {
        let currentCountryCode = ApiManager.shared.mainCountryCode
        switch segment.selectedSegmentIndex {
        case 0:
            let filterParametersCopy = self.filterParameters
            self.countryFilterParameters[currentCountryCode] = filterParametersCopy
            ApiManager.shared.setCountryCode(_countryCode: "kz")
            if let uwCountryFilterParameters = self.countryFilterParameters["kz"] as? [String : Any] {
                self.filterParameters = uwCountryFilterParameters
            } else {
                self.filterParameters.removeAll()
            }
            break
        case 1:
            let filterParametersCopy = self.filterParameters
            self.countryFilterParameters[currentCountryCode] = filterParametersCopy
            ApiManager.shared.setCountryCode(_countryCode: "ru")
            if let uwCountryFilterParameters = self.countryFilterParameters["ru"] as? [String : Any] {
                self.filterParameters = uwCountryFilterParameters
            } else {
                self.filterParameters.removeAll()
            }
            break
        case 2:
            let filterParametersCopy = self.filterParameters
            self.countryFilterParameters[currentCountryCode] = filterParametersCopy
            ApiManager.shared.setCountryCode(_countryCode: "by")
            if let uwCountryFilterParameters = self.countryFilterParameters["by"] as? [String : Any] {
                self.filterParameters = uwCountryFilterParameters
            } else {
                self.filterParameters.removeAll()
            }
            break
        default:
            break
        }
        self.loadTenders()
    }
}

预期字典:

["kz": ["q": "some key word", "start_date": ""],
 "ru": ["q": "other key word", "start_date": ""]]

但每次我尝试访问countryFilterParameters时,它都会删除旧值。即:当我执行 CountryFilterParameters["by"] = ["q": "another key word", "start_date": ""] 时。 debugPrint(CountryFilterParameters) 打印 ["by": ["q": "另一个关键字", "start_date": ""]]

问题是每次将新键值添加到全局字典时,它都会删除旧键值。可能是什么问题以及如何解决它?

我读到字典是一个结构,所以它是一个值类型。所以我很困惑,哪里做错了?

最佳答案

尝试删除 else 部分,从代码中删除字典的所有值。

        else {
                self.filterParameters.removeAll()
            }

从两个案例中删除此语句。

关于ios - 字典中的 swift 行动不可预测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45010587/

相关文章:

ios - CABasicAnimation 在动画完成后重置为初始值

css - Sass 映射生成变量名

ios - 重新加载 UITableView 并在之后运行一些东西

python - Python 中 `dict` 的内存分配是如何工作的?

c++ - std::wstring 不适用于 std::map<const wchar_t*, const char*> 的 [] 运算符

ios - 改变 UIView 的大小

ios - CI - Xcode 9 服务器在集成后不发送电子邮件

ios - UIGraphicsGetImageFromCurrentImageContext 和 Swift 内存使用

swift - 在本地保存整型变量

Swift:如何通过引用函数传递对象数组