Swift 可选类型的本质

在【基础-可选类型】中提到过,可以把可选类型看成是一个特殊的类型,只有两种情况: 有值(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 无法进行类型推断;

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容