Rat*_*ker 5 if-statement reference swift
我正在尝试在其中注入一些值[String: Any]以供以后使用。
我的代码的简约示例:
var info = ["Person" : [
"Age" : 20,
"Name" : "Ratul Sharker"
]]
print(info)
if var person = info["Person"] as? [String:Any] {
person["height"] = 5.5
print("~~> Height injected")
//
// however if i reassign the
// person into the info, then
// the info appear into the print
// info["Person"] = person
}
print(info)
Run Code Online (Sandbox Code Playgroud)
代码也分享在这里
这段代码的输出给了我
["Person": ["Age": 20, "Name": "Ratul Sharker"]]
~~> Height injected
["Person": ["Age": 20, "Name": "Ratul Sharker"]]
Run Code Online (Sandbox Code Playgroud)
显然height,我注入没有任何效果,因为当发生可选的展开时,它会创建字典的另一个副本person。因此,更改仍然是本地的。将当地人分配到字典中就可以了。
这里我想要的不是在可选使用展开时复制值if let。有什么方法可以告诉if let构造,以便它采用值的引用而不是值。我已经搜索了很多关于这种情况的信息,我都是通过引用使用&and的函数来获得传递的inout。
提前致谢。
就像你写的那样,字典是一种值类型。因此,如果您想进行更改,则必须在原始变量上进行更改(在您的情况下是info)。
这意味着要像下面这样做:
info["Person"]?["height"] = 5.5