如何在使用“if let”可选展开时获取引用(快速)

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

提前致谢。

San*_*ndu 1

就像你写的那样,字典是一种值类型。因此,如果您想进行更改,则必须在原始变量上进行更改(在您的情况下是info)。

这意味着要像下面这样做:

info["Person"]?["height"] = 5.5