以上程序执行结果为:

字符串为 nil

可选类型类似于Objective-C中指针的nil值,但是nil只对类(class)有用,而可选类型对所有的类型都可用,并且更安全。


强制解析

当你确定可选类型确实包含值之后,你可以在可选的名字后面加一个感叹号(!)来获取值。这个感叹号表示"我知道这个可选有值,请使用它。"这被称为可选值的强制解析(forced unwrapping)。

实例如下:

import Cocoavar myString:String?myString = "Hello, Swift!"if myString != nil {
   print(myString)}else{
   print("myString 值为 nil")}

以上程序执行结果为:

Optional("Hello, Swift!")

强制解析可选值,使用感叹号(!):

import Cocoavar myString:String?myString = "Hello, Swift!"if myString != nil {
   // 强制解析
   print( myString! )}else{
   print("myString 值为 nil")}

以上程序执行结果为:

Hello, Swift!

注意:
使用!来获取一个不存在的可选值会导致运行时错误。使用!来强制解析值之前,一定要确定可选包含一个非nil的值。


自动解析

你可以在声明可选变量时使用感叹号(!)替换问号(?)。这样可选变量在使用时就不需要再加一个感叹号(!)来获取值,它会自动解析。

实例如下:

import Cocoavar myString:String!myString = "Hello, Swift!"if myString != nil {
   print(myString)}else{
   print("myString 值为 nil")}

以上程序执行结果为:

Hello, Swift!

可选绑定

使用可选绑定(optional binding)来判断可选类型是否包含值,如果包含就把值赋给一个临时常量或者变量。可选绑定可以用在if和while语句中来对可选类型的值进行判断并把值赋给一个常量或者变量。

像下面这样在if语句中写一个可选绑定:

if let constantName = someOptional {
    statements}

让我们来看下一个简单的可选绑定实例:

import Cocoavar myString:String?myString = "Hello, Swift!"if let yourString = myString {
   print("你的字符串值为 - (yourString)")}else{
   print("你的字符串没有值")}

以上程序执行结果为:

你的字符串值为 - Hello, Swift!