zoukankan      html  css  js  c++  java
  • Swift语言中与C/C++和Java不同的语法(二)

    这一部分,主要讲Swift中创新的可选型(optionals)

    一、概要

    可选型是Swift创新的一种新的类型,首先看一下可选型的应用场景:

    var errorCode : Int = 404

    这时候errorCode的值是404,表示此时的错误状态码是404,当产生一种错误的时候就会获得其对应的errorCode,

    但是如果没有错误那应该怎么办呢?

    在C/C++和Java中我们会给errorCode赋值为0或者是null(其实null也就是0),但是我们怎么能够保证0不是一种错误的状态码呢?

    Swift为了解决这一问题,提供了可选型(optionals)当这个值不存在的时候,我们用nil表示,

    需要注意的是:

    var errorCode : Int = 404

    errorCode = nil

    这是错误的,因为nil是一种特殊的类型,是不可以赋值给int型的变量的。

    正确的操作是:

    var errorCode : Int? = 404

    errorCode = nil

     添加一个?就对了,这时候Int?表示的是整型的可选型

    需要注意的是,可选型不可以赋值给不可选型的变量。

    二、可选型的解包

    在使用可选型的时候,需要进行解包操作,有两种解包(unwrap)方式:

    1)强制解包

    var errorCode : Int? = 404

    print(“The errorCode is”+errorCode!)

    这种解包方式需要开发者保证errorCode的值不是nil,否则就会报错。

    2)if-let解包

    var errorCode : Int? = 404

    if let errorCode = errorCode {

      print(“The errorCode is”+errorCode)  

    }

    建议采用这种方式,当出现多个量需要解包的时候:

    if let errorCode = errorCode,

       errorMessage = errorMessage{

    }

    三、optional Chaining

    先看看应用环境:

    var errorMessage : String? = “Not Found”

    if let errorMessage = errorMessage{

      errorMessage.uppercaseString

    }

    这种方式是错的,因为errorMessage是String而不是String?

    如果要使用String的uppercaseString方法的话可以这样做:

    errorMessage?.uppercaseString

    或者

    errorMessage!.uppercaseString(确定不是nil)

    这里的返回类型也是一个可选型

    如果errorMessage!.uppercaseString返回,再进行操作就类似一条chain。

    四、nil coalesce

    我们建议在声明变量的时候就给变量赋初值,但有时候,我们希望通过后面的逻辑判断之后再对变量进行赋值

    这时候我们可以这样做:

    var errorMessage : String? = nil

    let message = errorMessage == nil ? “Not Found” : errorMessage

    当然可以通过nil coalesce方式

    var errorMessage : String? = nil

    let message = errorMessage??“Not Found”

    五、元组的可选型

    var error1 : (errorCode : Int?, errorMessage : String?) = (404, “Not Found”)

    其中errorCode和errorMessage是可选型,但是error1不是可选型

    因此errorCode和errorMessage可以是nil,而error1不可以

    var error1 : (errorCode : Int?, errorMessage : String?)? = (404, “Not Found”)

    errorCode和errorMessage,error1就都是可选型了

    六、隐式可选型

    主要应用在函数的构造函数中

    var errorMessage : String! = nil

    !进行使用的时候可以不进行解包操作,但是必须确保不为nil

    在使用的时候,构造函数可以这样定义,但是在后面会先赋值,再使用。

  • 相关阅读:
    Auto.js 入门教程
    几乎纯css实现弹出框
    php curl访问https 域名接口一直报错的问题
    金山打字通刷打字速度脚本
    centos 安装 图像识别工具 tesseract-ocr 流程
    js 实现俄罗斯方块(三)
    小程序报错 .wxss 无法找到
    Redis存储数组
    问题记录-databinding/hilt踩坑记录
    问题记录-CoordinatorLayout+WebView使用遇到的问题
  • 原文地址:https://www.cnblogs.com/winterfells/p/7425211.html
Copyright © 2011-2022 走看看