我在字典参数中有一组参数:[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/