gpt4 book ai didi

swift - 为什么在 Swift 中包装可选值?是否可以在不声明类型的情况下将变量设置为可选?

转载 作者:行者123 更新时间:2023-11-28 10:08:22 26 4
gpt4 key购买 nike

如果我想让一个变量成为可选变量,我可以这样做:

var exampleString: String? = nil

var exampleString: String? = "This is a string"

是否可以在不分配 String、Int、Bool 等类型的情况下声明可选值?

类似的东西(不返回错误):

var exampleVar? = nil

我没有用例说明我为什么要这样做,但我试图更好地理解可选值。我刚刚通读了 Swift 文档中的 Optionals 部分。 如果可以做到,这样做有什么好处吗?

此外,为什么我不想在任何地方都使用隐式展开的可选值?这样做有什么缺点? Apple 的 Swift 文档提到,如果您打算将变量重新分配给 nil,则不应这样做。为什么?

非常感谢您的帮助!

最佳答案

Is it possible to declare an optional value without assigning a type like String, Int, Bool, etc?

没有。原因是 Optional (没有它的泛型参数)不是一个完整的类型——可以把它想象成一个类型构造函数,即如果你给它缺少的信息,它是一种生成完整类型的方法。

编译器需要知道完整的类型 — Optional<Int>Optional<String>等等——分配适量的内存等。Optional<String>将占用比 Optional<Bool> 更多的内存, 即使两者都是 nil .

其他泛型也是如此,比如 Array . Array是类型构造函数,Array<Int>完整类型。

编辑:rmaddy说得好:var exampleVar: Any? = nil允许您在此可选中存储任何值。请注意,我们仍然在这里处理完整类型 — Optional<Any> .只是所有类型都兼容 Any .从这个意义上说,Optional<Any>Optional<SomeProtocol> 没有太大区别, 它可以存储任何符合 SomeProtocol 的值协议(protocol)。

关于swift - 为什么在 Swift 中包装可选值?是否可以在不声明类型的情况下将变量设置为可选?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50778873/

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