在【基础-可选类型】中提到过,可以把可选类型看成是一个特殊的类型,只有两种情况: 有值(Optional)、无值(nil) 。
其实本质与这种说法类似 - 可选类型 是名为Optional的枚举类型,以下摘自xcode,删去了注释
@frozen public enum Optional<Wrapped> : ExpressibleByNilLiteral {
case none
case some(Wrapped)
public init(_ some: Wrapped)
}
*如果觉得这个枚举类型奇怪,请看 【基础-枚举】章节
发现了这个之后基本可以确定 问号?这种形式,是语法糖,为了简化书写
所以以下写法也成立
var title: String? = "baidu"
var title2: Optional<String> = Optional<String>.some("baidu")
var title3: Optional = Optional<String>.some("baidu")
var title4: Optional = Optional.some("baidu")
var title5: Optional = .some("baidu")
var title6 = Optional.some("baidu")
var text: String?
var text1: String? = nil
var text2: Optional<String> = Optional<String>.none
var text3: Optional = Optional<String>.none
var text4 = Optional<String>.none
这里要注意
var title6 = Optional.some("baidu")
title6可以忽略类型<String>是因为编译器可以类型推断,但
var text4 = Optional<String>.none
text4 不可以忽略,因为.none 无法进行类型推断;