一,可选变量的定义
//定义可选变量类型,以下两种方式是一样的 ?表示可选类型Option
var optionalInteger:Int?
var optionalInteger1:Optional<Int>
//可选变量 -数组
var dataArray:([Int])?
//可选变量 -字典
var searchDic:([String:Any])?
//可选变量的声明和初始化赋值 使用?和!都可以声明可选变量
var var1:String? = nil
var var2:String! = "12345"
二,强制解析
使用可选变量的时候需要使用!来解析可选变量里面的值(强制解析 forced unwrapping), 使用!的时候表示这个可选变量里面一定有值,如果可选变量没有提供初始值,那么默认是nil
//使用了?创建的可选变量,解析的时候需要使用强制解析
var userName:String?
userName = "hello swift!"
//如果一个可选类型是包含一个值,那么可以使用操作符!来取这个值
//如果可选类型是个nil, 使用!来获取可选类型里的值会出现错误
//nil值是针对类(class)有用, 而可选类型对所有的类型都有用,并且安全
//要解决这个问题需要先判断可选类型是否是nil
if userName != nil {
//打印可选变量
print(userName)
//打印可选变量里的值
//我已经确认userName这个可选变量有值
//所以我可以强制解析(forced unwrapping), !获取可选变量里的值
print(userName!)
}else{
print("userName = nil")
}
三,自动解析
使用!声明的可选变量不需要强制解析,所以用!声明的可选变量不需要使用!来解析,而是直接使用,因为已经是自动解析了
var userName1:String!
userName1 = "This is automatic unwrapping!"
print(userName1)
四,可选绑定(optional binding)
1,可选绑定是用来判断可选类型是否包含值的,如果包含就会赋值给一个临时常量或变量
2,可选绑定一般结合使用if或while语句来使用
if let name = userName {
print("name=\(name)")
}else{
print("name = nil")
}
网友评论