美文网首页
Swift Optional(可选型)

Swift Optional(可选型)

作者: riner | 来源:发表于2017-10-13 18:11 被阅读0次

前言

在众多计算机语言编程中,往往在程序执行过程中会遇要变量为nil的时候,有时候程序对这个空的异常进行了异常捕获,而有时候却没有,这导致了程序出现crash。为了清楚的标记nil,Swift语言中引入了Optional可选型,那么什么叫做可选型呢?接下来开始我们的学习。

可选型到底是什么?

通俗易懂的讲 可选型就是可以存nil的变量,其实可选型分两种 显式可选型隐式可选型

显式可选型:

  • 定义一个可选型

    var errorCode:Int? = 404 //定义一个Int可选型
    errorCode = nil //可以赋值为nil

    var errorMessage:String? = "Not Found" //定义一个String可选型
    errorMessage = nil //可以赋值为nil

    也就是说可选型可以在 具体类型nil之间进行选择

  • 如何使用

当我们直接去使用可选型的时候,系统就会提示我们去加个!

Screen Shot 2017-10-13 at 5.27.00 PM.png

那为什么要加!,才可以使用呢,这是因为可选型中的类型并不是完全的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
}

特性:

  1. 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
}
  1. Nil-Coalesece

这个机制可以在我们不知悉变量是否为nil的情况下,为nil这种状态 赋个初值

let message3 = errorMessage ?? "No ERROR" //解包是否是nil 如果是则赋值给"NO ERROR"
  1. 元组中的可选型
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拖拽的属性。

Screen Shot 2017-10-13 at 6.08.13 PM.png

那么隐式可选型既然已经确定不会是nil,那可以不解包直接去 使用 吗?
答案当然是“直接使用”即可

var errorMessage4:String! = nil
errorMessage4 = nil
errorMessage4.uppercased()

相关文章

网友评论

      本文标题:Swift Optional(可选型)

      本文链接:https://www.haomeiwen.com/subject/dlazyxtx.html