Swift中Optional值的链式调用学习笔记_Swift

Swift中的Optional值有这样的特性,当对其进行可选拆包时,即使用?进行Optional类型值的取值时,如果Optional值不为nil,则会返回原始类型的数据值,如果为nil,则会返回nil。因此,当使用?对Optional拆包后进行方法、属性或者下标的调用时,如果有值,则会成功相应调用,如果没有值,则会调用失败,返回nil。

注意:使用!则会进行强制拆包,这时如果Optional值为nil,则会出现运行时错误,因此开发者在使用!进行强制拆包时,必须确认Optional类型值不为nil。

当对可选值进行可选拆包并调用其属性或方法后,无论原属性或者方法返回值是什么类型的,都会被包装成Optional值类型。当使用?对一个Optional值进行拆包并调用其方法时,方法的返回值一会被包装为Optional类型,示例如下:

class Myclass {
  var cls:MyClassTwo?

}
class MyClassTwo {
  func run() -> String {
    return "run"
  }
}

let obj:Myclass = Myclass()
//将返回nil
obj.cls?.run()

在进行Optional链调用的时候,会遵守如下一些特性:

1.如果进行?拆包Optional值的属性或者方法返回值原来为非Optional值,则会包装成Optional值。

2.如果进行?拆包Optional值的属性或者方法返回值原来为Optional值,则依然会返回Optional值,并且并不会进行Optional值类型的嵌套。

3.由于使用Optional值?可选拆包时会将其属性和方法的返回值都包装成Optional类型的,因此使用?可以进行Optional链式调用,这其间,有一个环节调用失败,整个链都会返回nil。

示例如下:

let obj:Myclass = Myclass()
//将返回nil
(obj.cls?.run())?.startIndex

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索swift
, Optional链
Optional
,以便于您获取更多的相关知识。

时间: 2024-08-02 20:18:34

Swift中Optional值的链式调用学习笔记_Swift的相关文章

Swift中的条件切换语句switch...case学习教程_Swift

语法Swift 语言中 switch 语句的语法: 复制代码 代码如下: switch expression {    case expression1  :       statement(s)       fallthrough /* 可选 */    case expression2, expression3  :       statement(s)       fallthrough /* 可选 */    default : /* 可选 */       statement(s);

Swift中内置的集合类型学习笔记_Swift

一.引言 Swift中提供了3种集合类型,Array数据类型,Set集合类型,Dictionary字典类型.Array用于存放一组有序的数据,数据角标从0开始一次递增:Set用于存放一组无序的数据,数据不可以重复:Dictionary也用于存放一组无序的数据,只是其是按照键值对的方式存储,键值必须唯一.这里借用官方文档中的一张图来表示3种集合类型的特点: 二.Array类型 Array通常也被称为数组,Swift是一种类型安全语言,其中的Array类型也必须确定其元素的类型,声明数组类型有两种方

在Swift中使用Objective-C编写类、继承Objective-C类_Swift

互用性(互操作性)使开发者可以定义融合了 Objective-C 语言特性的Swift类.编写 Swift 类时,不仅可以继承 Objective-C 语言编写的父类,采用 Objective-C 的协议,还可以利用 Objective-C 的一些其它功能.这意味着,开发者可以基于 Objective-C 中已有的熟悉.可靠的类.方法和框架来创建 Swift 类,并结合 Swift 提供的现代化和更有效的语言特点对其进行优化. 继承Objective-C的类 在 Swift 中,开发者可以定义一

Swift中的条件判断、循环、跳转语句基础学习笔记_Swift

一.引言 一种编程语言的强大与否,很大程度上取决于其提供的程序流程控制方案,就如使用汇编语言实现复杂的程序流程是一件痛苦的事情.Swift中提供了许多强大的流程控制语句,例如快速遍历for-in,while循环,repeat-while循环,switch选择等,需要注意的是,在Swift2.2中,for(a;b;c)循环已经被弃用掉,并且Swift中的Switch语句也更加强大,可以处理任意数据类型. 二.for-in循环 配合范围运算符,for-in循环可以用来执行确定次数的循环,示例如下:

Swift中的类class与结构体struct体学习笔记_Swift

一.引言Swift中的类与结构体十分相似,和Objective-C不同的事,Swift中的结构体不仅可以定义属性,也可以像类一样为其定义方法. Swift中的类与结构体有如下相似点: 1.定义属性来存储值. 2.定义函数来提供功能. 3.通过定义下标语法使用下标的方式取值. 4.定义构造方法来对其进行初始化. 5.通过扩展来在原始基础上添加功能. 6.通过协议来定义实现标准. 当然类和结构体也有许多不同点,下面这些功能是类独有的,结构体没有: 1.通过继承来创建类的子类. 2.在运行时允许对类的

详解Swift中的Characters字符类型与String字符串类型_Swift

一.引言 Swift中提供了String类型与Characters类型来处理字符串和字符数据,Swift中的String类型除了提供了许多方便开发者使用的方法外,还可以与Foundation框架的NSString类进行转换,使用起来十分方便. 二.String基础 在Swift中,使用双引号来定义字符串,开发者可以通过如下代码来创建一个字符串常量: let str = "Hello, playground" 可以通过下面两种方式来创建空字符串: let str1 = "&qu

Swift里的值类型与引用类型区别和使用_Swift

Swift里面的类型分为两种: ●值类型(Value Types):每个实例都保留了一分独有的数据拷贝,一般以结构体 (struct).枚举(enum) 或者元组(tuple)的形式出现. ●引用类型(Reference Type):每个实例共享同一份数据来源,一般以类(class)的形式出现. 在这篇博文里面,我们会介绍两种类型各自的优点,以及应该怎么选择使用. 值类型与引用类型的区别 值类型和引用类型最基本的分别在复制之后的结果.当一个值类型被复制的时候,相当于创造了一个完全独立的实例,这个

在 Swift 中使用闭包实现懒加载

本文讲的是在 Swift 中使用闭包实现懒加载, 原文地址:Swift Lazy Initialization with Closures 原文作者:Bob Lee 译文出自:掘金翻译计划 译者:lsvih 校对者:zhangqippp,Zheaoli 在 Swift 中使用闭包实现懒加载 学习如何兼顾模块化与可读性来创建对象 图为苹果的 Magic Keyboard 2 与 Magic Mouse 2 亲爱的读者你们好!我是 Bob,很高兴能在这篇文章中与你们相遇!如你想加入我的邮件列表,获取

Swift中常量和变量的声明

常量是在程序运行过程中,不会被修改的量.也就是说,常量一经赋值,就不能再次赋值了. 变量是在程序运行过程中,可以被多次赋值的量.也就是说,常量即使已经赋值,还可以再次赋值. 在C语言中,如果我们要声明常量,需要在类型前面加上const.例如,声明一个值为10的整型常量i的语句如下: const int i = 10; 在Swift中,我们使用let来声明常量,使用var来声明变量.例如,同样是声明一个值为10的整型常量i的语句如下: let i: Int = 10 声明一个值为20的整型变量j的