swift之可选类型
最后更新于:2022-04-01 11:39:37
可选类型用来表示值缺失的情况
C和OC中没有可选类型这个概念
~~~
//可选类型定义
var x : Int?
var y : Int
y = 10
print("\(x) -- \(y)")
//输出:nil -- 10
~~~
如果注释掉 y = 10 则发生错误:
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/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
~~~