ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
可选类型用来表示值缺失的情况 C和OC中没有可选类型这个概念 ~~~ //可选类型定义 var x : Int? var y : Int y = 10 print("\(x) -- \(y)") //输出:nil -- 10 ~~~ 如果注释掉  y = 10    则发生错误: ![](https://box.kancloud.cn/2016-05-05_572b19fe9babd.jpg) 但是可选类型就不会出错,因为如果声明了一个可选变量或者常量而没有赋值,则默认为nil nil不能用于非可选的常量或者变量 使用  !   号获取可选值 当你确定可选类型确实包含值之后,你可以在可选的名字后⾯加⼀个感叹号( !  )来获取值。这个惊叹号表⽰“我知道这个可选有值,请使⽤它。”这被称为可选值的 强制解析 ~~~ var str1 : String? = "myName" print("myName is \(str1)") print("myName is \(str1!)") ~~~ 输出: ~~~ myName is Optional("myName") myName is myName ~~~ 可选绑定: ~~~ /* 使⽤可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给⼀个 临时常量或者变量。可选绑定可以⽤在 if 和 while 语句中来对可选类型的值进⾏判断并把 值赋给⼀个常量或者变量。 */ var str2 : String? = "myStr2" if let str2Sub = str2 { print(str2Sub) }else{ print("无值") } //输出:myStr2 //如果str2可选类型包含一个值,就创建一个str2Sub的变量,并将可选包含的值赋给他 ~~~ 隐式解析可选类型 ~~~ /* 如上所述,可选类型暗⽰了常量或者变量可以“没有值”。可选可以通过 if 语句来判断是否 有值,如果有值的话可以通过可选绑定来解析值。 有时候在程序架构中,第⼀次被赋值之后,可以确定⼀个可选类型总会有值。在这种情况 下,每次都要判断和解析可选值是⾮常低效的,因为可以确定它总会有值。 这种类型的可选状态被定义为隐式解析可选类型(implicitly unwrapped optionals)。把 想要⽤作可选的类型的后⾯的问号( String? )改成感叹号( String! )来声明⼀个隐式解 析可选类型。 */ var str3 : String! str3 = "myStr33333333" print(str3) //不需要用!取值 //输出:myStr33333333 ~~~