- 出自:huazhume
前言
在众多计算机语言编程中,往往在程序执行过程中会遇要变量为nil
的时候,有时候程序对这个空的异常进行了异常捕获,而有时候却没有,这导致了程序出现crash
。为了清楚的标记nil
,Swift语言中引入了Optional可选型,那么什么叫做可选型呢?接下来开始我们的学习。
可选型到底是什么?
通俗易懂的讲 可选型就是可以存nil
的变量,其实可选型分两种 显式可选型 和 隐式可选型
显式可选型:
-
定义一个可选型
var errorCode:Int? = 404 //定义一个Int可选型
errorCode = nil //可以赋值为nilvar errorMessage:String? = "Not Found" //定义一个String可选型
errorMessage = nil //可以赋值为nil也就是说可选型可以在 具体类型 和
nil
之间进行选择 -
如何使用
当我们直接去使用可选型的时候,系统就会提示我们去加个!
那为什么要加!
,才可以使用呢,这是因为可选型中的类型并不是完全的Class
类型,而是之中包含了nil
,因为Swift中,进行复制或者加减等一些列程序操作的时候,必须前后类型为一致。
当我们确保变量一定不是nil
的时候,我们就可以进行强制解包(也就是在变量之后加!
)
那么当我们不确定变量是否为nil
,那该如何正确解包呢?
- 第一种解包
if errorCode2 != nil {
print(errorCode2)
//do somethings
}
- 第二种解包
if let errorCode = errorCode2 {
//do somethings
}
if var errorCode2 = errorCode2 {
//do somethings
} else {
print("No error")
}
- 多个解包
if let errorcode = errorCode2,let errorMessage = errorMessage{
//do somethings
}
特性:
- Optional Chaining
Swift为什么提供了一个尝试解包的机制,就是说如果解包后不为nil
则程序继续,否则程序跳过继续执行。这样的操作是在可选型变量之后加?
例如:
var errorMessage2 :String? = "Not Found"
if let errorMessage2 = errorMessage2 { //正常解包
//do somethings
}
if let errorMessage3 = errorMessage2?.uppercased( ) { //尝试解包
//do somethings
} else {
//do somethings
}
- Nil-Coalesece
这个机制可以在我们不知悉变量是否为nil
的情况下,为nil
这种状态 赋个初值
let message3 = errorMessage ?? "No ERROR" //解包是否是nil 如果是则赋值给"NO ERROR"
- 元组中的可选型
var error1 : (errCode :Int ,ErrorMessage:String?) = (404,"Not found")
error1.ErrorMessage = nil
var error2: (errcode :Int ,errorMessage:String)? = (404,"Not found")
error2 = nil
var error3: (errcode :Int ,errorMessage:String?)? = (404,"Not found")
var ageInput:String = "1dsad6"
var age = Int(ageInput)
if let age = Int(ageInput), age < 20 {
}
隐式可选型:
有些情况下,我们定义的变量在一开始就已经不会是nil
了,这时候我们可以选择隐式可选型。比如outlet拖拽的属性。
那么隐式可选型既然已经确定不会是nil
,那可以不解包直接去 使用 吗?
答案当然是“直接使用”即可
var errorMessage4:String! = nil
errorMessage4 = nil
errorMessage4.uppercased()
网友评论