• Swift学习笔记-基本运算符(Basic Operators)-空合运算符(Nil Coalescing Operator)


    空合运算符(a ?? b)将对可选类型a进行空判断,如果a包含一个值就进行解封,否则就返回一个默认值b.这个运算符有两个条件:

    • 表达式a必须是Optional类型
    • 默认值b的类型必须要和a存储值的类型保持一致

    空合运算符是对以下代码的简短表达方法

    a != nil ? a! : b
    

    上述代码使用了三目运算符。当可选类型a的值不为空时,进行强制解封(a!)访问a中值,反之当a中值为空时,返回默认值b。无疑空合运算符(??)提供了一种更为优雅的方式去封装条件判断和解封两种行为,显得简洁以及更具可读性。

    注意: 如果a为非空值(non-nil),那么值b将不会被估值。这也就是所谓的短路求值。

    下文例子采用空合运算符,实现了在默认颜色名和可选自定义颜色名之间抉择:

    let defaultColorName = "red"
    var userDefinedColorName: String?   //默认值为 nil
    
    var colorNameToUse = userDefinedColorName ?? defaultColorName
    // userDefinedColorName 的值为空,所以 colorNameToUse 的值为 "red"
    

    userDefinedColorName变量被定义为一个可选String类型,默认值为nil。由于userDefinedColorName是一个可选类型,我们可以使用空合运算符去判断其值。在上一个例子中,通过空合运算符为一个名为colorNameToUse的变量赋予一个字符串类型初始值。 由于userDefinedColorName值为空,因此表达式userDefinedColorName ?? defaultColorName返回defaultColorName的值,即red

    另一种情况,分配一个非空值(non-nil)给userDefinedColorName,再次执行空合运算,运算结果为封包在userDefaultColorName中的值,而非默认值。

    userDefinedColorName = "green"
    colorNameToUse = userDefinedColorName ?? defaultColorName
    // userDefinedColorName 非空,因此 colorNameToUse 的值为 "green"
    
  • 相关阅读:
    Spring Boot SOAP系列之WSDL是什么“Lese”
    MyBatis源码分析和纯手写MyBatis框架集合
    哪吒:我命由我不由天
    手写MyBatis,纯手工打造开源框架(第四篇:决胜千里)- 第272篇
    Linux Submitting Patch
    Setting Up MySQL Debugging Environment
    How to mannuly configure vmtools in VM-Ware?
    How to mannuly configure vmtools in VM-Ware?
    Install 32bit libraries in 64 bit ubuntu(14.10)
    The easiest way to extract/uncompress files
  • 原文地址:https://www.cnblogs.com/emmet7life/p/4892571.html
Copyright © 2020-2023  润新知