牛骨文教育服务平台(让学习变的简单)

可选类型用来表示值缺失的情况

C和OC中没有可选类型这个概念

//可选类型定义

var x : Int?
var y : Int
y = 10
print("(x) -- (y)")
//输出:nil -- 10

如果注释掉  y = 10    则发生错误:

但是可选类型就不会出错,因为如果声明了一个可选变量或者常量而没有赋值,则默认为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