如果我想让变量成为可选项,我可以这样做:
var exampleString: String? = nil
或
var exampleString: String? = "This is a string"
是否可以在不指定String,Int,Bool等类型的情况下声明可选值?
类似的东西(没有返回错误):
var exampleVar? = nil
我没有用于我为什么要这样做的用例,但我试图更好地理解选项。我刚刚阅读了Swift文档中的Optionals部分。 如果可以这样做,这样做有什么好处吗?
另外,为什么我不想在任何地方使用隐式解包的选项?这有什么不利之处? Apple的Swift文档提到如果你打算将变量重新分配为nil,你就不应该这样做。为什么呢?
非常感谢你的帮助!
答案 0 :(得分:4)
是否可以在不指定String,Int,Bool等类型的情况下声明可选值?
没有。原因是Optional
(没有它的泛型参数)不是一个完整的类型 - 把它想象成一个类型的构造函数,即如果你给它缺少一个生成完整类型的方法信息。
编译器需要知道完整类型 - Optional<Int>
或Optional<String>
等等 - 以分配适当数量的内存等。Optional<String>
将占用比{Optional<Bool>
更多的内存{1}},即使两者都是nil
。
对于Array
等其他通用类型也是如此。 Array
是类型构造函数,Array<Int>
是完整类型。
编辑:rmaddy提出了一个很好的观点:var exampleVar: Any? = nil
允许您在此可选项中存储任何值。请注意,我们仍在处理完整类型 - Optional<Any>
。只是所有类型都与Any
兼容。从这个意义上讲,Optional<Any>
与Optional<SomeProtocol>
没有什么不同,后者可以存储符合SomeProtocol
协议的任何值。