gpt4 book ai didi

Swift:关于将 nil 分配给 var

转载 作者:搜寻专家 更新时间:2023-10-31 22:31:59 24 4
gpt4 key购买 nike

我在尝试学习 swift 基础知识时遇到了这个问题:

假设我们有一个 dic:

var presidentialPetsDict = ["Barack Obama":"Bo", "Bill Clinton": "Socks", "George Bush": "Miss Beazley", "Ronald Reagan": "Lucky"]

并删除“George Bush”条目并将其替换为“George W. Bush”条目:

我做了什么:

var oldvalue = presidentialPetsDict.removeValueForKey("George Bush")
if let value = oldvalue
{
presidentialPetsDict["George W. Bush"] = value
}else
{
print("no matching found")
}

因为我相信 removeValueForKey 方法会返回一个可选值,以防键“George Bush”不会返回值而是 nil,所以我们需要使用 if let 安全地解包它。但是,解决方案代码如下所示:

var oldValue = presidentialPetsDict.removeValueForKey("Georgee Bush")
presidentialPetsDict["George W. Bush"] = oldValue

我不明白的部分是,如果我们想将 nil 分配给 var,我们通常会这样做:

var value:String?
value = nil

但是即使方法返回 nil,上面的解决方案代码仍然有效,有人可以解释为什么它有效,因为我认为在解决方案中我们根本没有将 oldValue 声明为可选。

最佳答案

很好的问题!

由于您的数组被定义为 [String:String],您想知道为什么编译器让您分配一个可选的 String(所以 String? ) 到一个值。

编译器怎么可能会冒险将 nil 放入本应是非可选字符串 的内容中?

这段代码如何编译?

var oldValue: String? = presidentialPetsDict.removeValueForKey("Georgee Bush")
presidentialPetsDict["George W. Bush"] = oldValue

答案在这里

下标有如下逻辑,即使Dictionary的值为String,也可以使用下标赋值nil。在这种情况下,键将从数组中删除。

看这里

var numbers: [String:Int] = ["one": 1, "two": 2, "three": 3]
numbers["two"] = nil // it looks like I'm putting nil into a Int right?
numbers // ["one": 1, "three": 3]

关于Swift:关于将 nil 分配给 var,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37690417/

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