gpt4 book ai didi

swift - 如何在使用 `if let` 可选解包时获取引用(swift)

转载 作者:搜寻专家 更新时间:2023-11-01 06:13:00 27 4
gpt4 key购买 nike

我正在尝试在 [String: Any] 中注入(inject)一些值供以后使用。

我的代码的简约示例:

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)

代码也分享了here

这段代码的输出给了我

["Person": ["Age": 20, "Name": "Ratul Sharker"]]
~~> Height injected
["Person": ["Age": 20, "Name": "Ratul Sharker"]]

很明显,我注入(inject)的 height 没有效果,因为当可选的展开发生时,它会创建 person 字典的另一个副本。所以变化仍然是局部的。将本地人分配到字典中就可以了。

这里我想要的是不复制值,同时使用 if let 进行可选解包。有什么方法可以告诉 if let 构造,以便它引用值而不是值。我已经搜索了很多关于这种情况的信息,所有我都通过使用 &inout 的函数引用获得了传递。

提前致谢。

最佳答案

您需要将新字典 person 保存回原始字典。

if var person = info["Person"] {
person["height"] = 5.5
info["Person"] = person // <------ important
}

更新

既然你不想使用可选的绑定(bind)语句,这里有另一个解决方案

struct Person {
let age: Int
let name: String
var height: Float?
}

var person = Person(age: 20, name: "Ratul Sharker", height: nil)

person.height = 5.5

关于swift - 如何在使用 `if let` 可选解包时获取引用(swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51189629/

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