Optional-Optional Chaining

2024-02-22 13:48
文章标签 optional chaining

本文主要是介绍Optional-Optional Chaining,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

/*

1.Optional类型表示的内容要不是某个值,要么是nil

可选类型让开发人员可以在程序运行时检测一个值是否存在,根据检查结果进行不同的处理。


2.nil coalescing operator ??


3.Optional Chaining


4.函数返回值可以是Optional的。

*/


//1.基本定义

var strNumber = "123"

var varopt:Int//没有赋值的情况下默认为nil

varopt = strNumber.toInt()


if varopt != nil //beta5中修改,optional的变量不可以直接用if来判断

{

    println("varopt is not nil")

}


//2.nil coalescing operator ??

var dest = varopt ?? 10

//相当于 var dest = ( varopt != nil ? varopt! : 10 )

println(dest) //因为varoptnil所以dest的值为10


/* 解包:所谓解包就是将Optional类型变量的值解包出来(取出来)

强制解包:opt! 如果强制解包一个nil的值,

fatal error: unexpectedly found nil while unwrapping an Optional value */

var optstr:String?

//println(optstr!.toInt())

println(optstr?.toInt()) //非强制解包,如果optstrnil的话则返回一个nil的值。


//为了避免在以后每次用到optstr2,都要写为 optstr2? 的形式,可以使用隐式解包

//在定义时不是用?而是使用!来说明该变量在使用前肯定会被赋值的,在以后的使用中像正常变量一样。

var optstr2:String! = "123"

println(optstr2.toInt())


//3. Optional Chaining 可选链,比如可选变量的一个属性也是可选的。使用形式:a?.b?.c?

class Person

{

    var residence: Residence?

}


class Residence

{

    var numberOfRooms = 1

    

    func printNumber()

    {

        println("printNumber \(numberOfRooms)")

    }

}


var jone = Person()

jone.residence = Residence()


//printNumber的返回值为空的tuple,如果jone.residencenil,则该函数的调用为nil

//否则将会执行该函数。

if jone.residence?.printNumber() != nil

{

    println("Jone's has room")

}

else

{

    println("Jone's has no room")

}


//字典使用

var testScores = ["Dave": [86, 82, 84], "Tim": [79, 94, 81]]

testScores["Dave"]?[0] = 91


//4.函数返回optional类型

func test(id:Int)->Int?

{

    if id > 10

    {

        return 3

    }

    else

    {

        return nil

    }

}


var id = test(3)

println(id) //返回nil,函数返回值赋值给Int?类型的id

//


这篇关于Optional-Optional Chaining的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/735450

相关文章

JAVA 中的Optional类详解

JAVA 中的Optional类详解 一、引言 Java 8 引入了 Optional 类,旨在提供一种更优雅的方式来处理可能为 null 的情况,从而避免 NullPointerException。Optional 是一个容器对象,它可能包含也可能不包含非空值。使用 Optional 可以显著减少代码中的 null 检查,使代码更加简洁和安全。 二、Optional 类的基本概念 1、创

用Optional后代码变清爽多了

前言 编程路上风雨兼程,踩过的坑比喝过的奶茶还要多几分回味。今天,咱们深入浅出,探讨一个既平凡又深奥的操作——判空艺术,特别是那经典桥段 != null。在与臭名昭著的 NullPointerException(简称NPE,程序界的“空指针噩梦”)的持久战中,这招几乎是程序员的护身法宝。 想当年,我还是编程界的新兵蛋子,对 null 敏感得像雷达,逢 null 必严谨判空,if (某物 !=

Java8新特性-Optional的使用

写在前面 最开始学java的时候,总能听到别人说java8的新特性,比如lambda表达式,stream流等等。但是第一次接触Optional是在公司前辈的代码中看到的。最开始我还以为是公司自己的工具类,也没太注意。后来才知道他也是java8最重要的一个特性。 关于Optional 简单来说Optional就是解决空指针异常(NullPointerException)的一个类。在平时的代码中

JDK8新特性之Optional快速入门

目录标题 1、创建Optional对象2、值为空时Optional提供的else操作3、map()转换的操作4、isPresent()和ifPresent()判断值是否为空5、filter()过滤值 作为程序猿一定会遇到NullPointerException异常,简称NPE,随之而来的就是为空判断if else。逻辑稍微复杂点,代码就显得不好看了。比如: public Stri

标准库标头 <optional> (C++17)学习之optional

类模板 std::optional 管理一个可选 的所含值,即既可以存在也可以不存在的值。 一种常见的 optional 使用情况是作为可能失败的函数的返回值。与如 std::pair<T, bool> 等其他手段相比,optional 可以很好地处理构造开销高昂的对象,并更加可读,因为它明确表达了意图。 optional<T> 的任何实例在任意给定时间点要么含值,要么不含值。 如果一个

Java 8中Optional类

文章目录 引言概述创建Optional对象Optional.ofOptional.ofNullableOptional.empty 操作Optional对象检查值是否存在:isPresent与isEmpty获取值:get方法获取值(提供默认值):orElse、orElseGet、orElseThrow消费值:ifPresent与ifPresentOrElse Optional高级操作转换与映

java.util.Optional.or() .orElse(), .orElseGet()的区别

java.util.Optional 是 Java 8 引入的一个容器类,用于表示一个可能包含或不包含非空值的对象。它提供了多种方法来处理可能为空的对象,从而避免使用null值。 在 Optional 中,.or(), .orElse(), 和 .orElseGet() 都是用于处理可能为空的值的方法,但是它们的行为和使用场景有所不同。 1. Optional.or(Supplier<? ex

【JDK8之旅】——Optional

我们知道 Java 8 增加了一些很有用的 API, 其中一个就是 Optional. 如果对它不稍假探索, 只是轻描淡写的认为它可以优雅的解决 NullPointException 的问题, 于是代码就开始这么写了 Optional<User> user = ......if (user.isPresent()) {return user.getOrders();} else {return

Java的Optional类——解决空指针异常的好工具

java.util.Optional 类是 Java 8 引入的一个容器对象,旨在解决空指针异常的问题。Optional 类提供了一种优雅的方式来处理可能为 null 的值,从而避免了显式的 null 检查。这对于提高代码的可读性和减少空指针异常非常有用。 Optional 类的基本用法 构造:不能直接使用 new Optional() 创建 Optional 对象,因为它的构造器是私有的。