gpt4 book ai didi

swift - 为什么可以在 Swift 中将非可选值分配给可选类型?

转载 作者:行者123 更新时间:2023-11-30 12:48:45 24 4
gpt4 key购买 nike

为什么涉及 Swift 可选类型的赋值要进行类型检查?例如,

 var foo : Int? = 0
foo = foo!

富和富!没有相同类型。难道您不需要包装未包装的值以将其分配给可选类型吗?

最佳答案

这是选项背后语法糖的一部分。分配非可选值是如何将其包装在可选类型中。

由于可选值指示值的存在或不存在,因此除了提供值之外,您不必执行任何特殊操作来指示值的存在。例如,在一个函数中:

func gimmeSomethingMaybe() -> String? {
if arc4random_uniform(10) > 7 {
return "something"
} else {
return nil
}
}

想象一下,如果每次您想要从能够返回 nil 的函数返回实际值时,您都必须编写 returnOptional(value)。那会很快变老,对吗?可选是该语言的一个重要功能 - 尽管它们实际上是由标准库实现的,但语法糖/自动包装可以防止使用它们变得乏味。

<小时/>

编辑:只是为了更进一步......糖还有助于强化这样的观念:真实值不应该是可选的。例如:

let one = 1
one? // error (in Swift 1.2, allowed but meaningless in Swift 1.1)
"two"? // error (ditto)

您可以使用 Optional(one) 初始值设定项创建一个包装实际值的可选值,但这本身几乎没有语义意义,因此您几乎不需要这样做。

当某个值是否存在或不存在存在“神秘性”时,即当程序的某个部分是否接收到值(或没有值)取决于该部分未知的状态时,选项应该发挥作用。程序。如果你知道你有一个真正的值,那就没有什么神秘的......相反,你让未知的东西在知道该值的代码和不知道该值的代码之间的边界发挥作用 - 即函数/方法/属性定义将该值传递给某个地方。

关于swift - 为什么可以在 Swift 中将非可选值分配给可选类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291433/

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