可选类型(Optional):可能为nil也可能为具体的值
1.声明一个可选类型
var temp:String?
temp="test"
2.使用可选类型的变量
print(temp) //输出结果为:Optional("test")
print(temp!) //输出结果为:test
总结:类型后面加?表示一个可选类型,变量后面加!表示对可选类型的拆包可得到具体的值
3.可选链
形如:person?.book!.price!或person.book!.price!
如果book为nil时,第二种会报错,第一种会返回一个可选类型继续执行
4.隐士拆包
形如:@IBOutlet weak var tableView: UITableView!
隐士拆包,相当于每次使用时自动在变量后加!拆包
总结:变量后加?表示一个可选链,类型后加!表示隐士拆包