gpt4 book ai didi

swift - 无法更新嵌套字典的值

转载 作者:搜寻专家 更新时间:2023-11-01 07:34:11 25 4
gpt4 key购买 nike

我正在尝试更新未知类型的复杂 Dictionary 中的值,因为它同时包含 String 和子词典。我的初始化函数代码如下。

这是我的 Dictionary 之前的样子:

var methods = [
"PUN": [
"name": "Time of PUN",
"params": ["FJ": 18, "IS": 17]
],
"KHR": [
"name": "Time KHR",
"params": ["FJ": 15, "IS": 15]
],
"LHR": [
"name": "Time of LHR",
"params": ["FJ": 19.5, "IS": 17.5 , "MG": 8.9]
]
]

这就是我想要动态实现的:

var methods = [
"PUN": [
"name": "Time of PUN",
"params": ["FJ": 18, "IS": 17, "Offset": "0 min", "Midnight": "Standard"]
],
"KHR": [
"name": "Time KHR",
"params": ["FJ": 15, "IS": 15, "Offset": "0 min", "Midnight": "Standard"]
],
"LHR": [
"name": "Time of LHR",
"params": ["FJ": 19.5, "IS": 17.5 , "MG":8.9, "Offset": "0 min", "Midnight": "Standard"]
]
]

这是我的代码:

我从 defaultParams(Dictionary)中获取额外值并插入到methods(Dictionary ).

var methods = [String: AnyObject]()
let defaultParams = ["Offset": "0 min", "Midnight": "Standard"]

init() {
methods["Punjab"] = [
"name": "Punjab Time",
"params": ["FJ": 18, "IS": 17]
]

methods["Karachi"] = [
"name": "Time of Karachi",
"params": ["FJ": 15, "IS": 15]
]

methods["Lahore"] = [
"name": "Lahore City Time",
"params": ["FJ": 19.5, "IS": 17.5 , "MG": 8.9]
]

for (methodName, methodValue) in methods {
var params = methodValue["params"]!!

for (defaultParamKey, defaultParamValue) in defaultParams {
if params.objectForKey(defaultParamKey) == nil {
// I am having problem with the line below, it says
// cannot asign a value of type String to a value of type AnyObject?!
params[defaultParamKey] = defaultParamValue
}
}
}
}

在初始化时,我只想通过使用变量 defaultParams 检查字典变量 methods 来插入缺失值。

最佳答案

这有点复杂,但它有效:

class Test {
var methods = [String: [String: AnyObject]]()
let defaultParams = ["Offset": "0 min", "Midnight": "Standard"]

init() {
methods["Punjab"] = [
"name": "Punjab Time",
"params": ["FJ": 18, "IS": 17]
]

methods["Karachi"] = [
"name": "Time of Karachi",
"params": ["FJ": 15, "IS": 15]
]

methods["Lahore"] = [
"name": "Lahore City Time",
"params": ["FJ": 19.5, "IS": 17.5 , "MG": 8.9]
]

for (methodName, methodValue) in methods {

for (mKey, mValue) in methodValue {

if mKey == "params" {

var pDic = mValue as! [String: AnyObject]

for (defaultKey, defaultValue) in defaultParams {

if !contains(pDic.keys, defaultKey) {

pDic[defaultKey] = defaultValue

methods[methodName]!["params"]! = pDic

}

}



}

}

}
}
}

let t = Test()
println(t.methods)

结果:

[Karachi: [params: { FJ = 15; IS = 15; Midnight = Standard; Offset = "0 min"; }, name: Time of Karachi], Punjab: [params: { FJ = 18; IS = 17; Midnight = Standard; Offset = "0 min"; }, name: Punjab Time], Lahore: [params: { FJ = "19.5"; IS = "17.5"; MG = "8.9"; Midnight = Standard; Offset = "0 min"; }, name: Lahore City Time]]

关于swift - 无法更新嵌套字典的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30986452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com