• 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

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

  • 相关阅读:
    每天一个linux命令(31): /etc/group文件详解
    每天一个linux命令(15):tail 命令
    每天一个linux命令(30): chown命令
    每天一个linux命令(22):find 命令的参数详解
    每天一个linux命令(23):Linux 目录结构
    每天一个linux命令(17):whereis 命令
    每天一个linux命令(18):locate 命令
    每天一个linux命令(34):du 命令
    每天一个linux命令(25):linux文件属性详解
    ThinkPad E420功能键和快捷键 以及 Fn和Ctrl键功能切换的设置,插入鼠标后, 关闭触摸板
  • 原文地址:https://www.cnblogs.com/winterfells/p/7425211.html
Copyright © 2020-2023  润新知