美文网首页
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