Swift中Optional值的链式调用学习笔记
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值的链式调用学习笔记
Swift中的Optional值有这样的特性,当对其进行可选拆包时,即使用?进行Optional类型值的取值时,如果Optional值不为nil,则会返回原始类型的数据值,如果为nil,则会返回nil.因此,当使用?对Optional拆包后进行方法.属性或者下标的调用时,如果有值,则会成功相应调用,如果没有值,则会调用失败,返回nil. 注意:使用!则会进行强制拆包,这时如果Optional值为nil,则会出现运行时错误,因此开发者在使用!进行强制拆包时,必须确认Optional类型值不为nil
-
Java中@Pattern注解常用的校验正则表达式学习笔记
目录 1. 前端传参要求 2.其他常用正则表达式 2.1 数字校验 2.2 字符串校验 2.3 月份时间校验 2.4 Email校验 2.5 汉字校验 2.5 联系电话校验 2.5 密码校验 总结 1. 前端传参要求 项目开发中经常会遇到对用户输入内容的限制,本篇对常用限制做一总结.如下图所示,标识字段有严格命名限制,用户输入校验这部分工作前端可以做,当然后端也可以通过在实体类中添加注解的方式实现参数校验.其底层原理还是拦截器拦截请求,对带有相关注解的属性字段进行处理(非空.大小.长度.内容等判
-
swift中可选值?和!使用的方法示例
Optional 可选值 Optional是 Swift 的一大特色,也是 Swift 初学者最容易困惑的问题. 定义变量时,如果指定该变量是可选的,表示该变量可以有一个指定类型的值,也可以是 nil. 此外,Swift的nil也和Objective-C有些不一样,在Objective-C中,只有对象才能为nil,而在Swift里,当基础类型(整形.浮点.布尔等)没有值时,也是nil,而不是一个初始值,没有初始值的值,是不能使用的,这就产生了Optional类型.定义一个Optional的值很容
-
Swift中的条件切换语句switch...case学习教程
语法 Swift 语言中 switch 语句的语法: 复制代码 代码如下: switch expression { case expression1 : statement(s) fallthrough /* 可选 */ case expression2, expression3 : statement(s) fallthrough /* 可选 */ default : /* 可选 */ statement(s); }
-
JS页面获取 session 值,作用域和闭包学习笔记
本文实例讲述了JS页面获取 session 值,作用域和闭包.分享给大家供大家参考,具体如下: Javascript获取session的值: var name= "${sessioScope.变量名}"; 注意这里面需要使用 "" 把 El 表达式给括起来,否则就取不到数据. JSP获取session的值: 可以直接${sessionScope.变量名},在标签里也是一样. JSP获取URL的值: var name = "<%=request.get
-
Python中函数参数设置及使用的学习笔记
一.参数和共享引用: In [56]: def changer(a,b): ....: a=2 ....: b[0]='spam' ....: In [57]: X=1 In [59]: L=[1,2] In [60]: changer(X,L) In [61]: X,L Out[61]: (1, ['spam', 2]) 函数参数是赋值得来,在调用时通过变量实现共享对象,函数中对可变对象 参数的在远处修能够影响调用者. 避免可变参数修改: In [67]: X=1 In [68]: a=X I
-
C#中的lock、Monitor、Mutex学习笔记
线程:线程是进程的独立执行单元,每一个进程都有一个主线程,除了主线程可以包含其他的线程. 多线程的意义:多线程有助于改善程序的总体响应性,提高CPU的效率. 多线程的应用程序域是相当不稳定的,因为多个线程在同一时间内都能运行共享的功能模块.为了保护应用程序的资源不被破坏,为多线程程序提供了三种加锁的机制,分别是:Monitor类.Lock关键字和Mutex类. 1. lock lock实现的功能是:使后进入的线程不会中断当前的线程,而是等待当前线程结束后再继续执行. 应用: 复制代码 代码如下:
-
Swift中常量和变量的区别与声明详解
Swift是弱类型语言吗? 答案是否定的,Swift 是强类型语言,下面上一个栗子 上面代码中报错了,报的是不能指定 Int 类型为 String 类型. 这里要注意一下在 Swift 中的整形是I,而字符类型首字母是S,都是大写字母 在 Swift 中我们可以直接声明 var 类型变量,可以不直接指定其类型,这是Swift语言的一种机制,当我们声明一个变量的初始值后,就已经确定这个变量是什么类型,Type Inference (类型推断) 如何查看一个变量的类型 在开发中我们一般如何查看一个变
-
JavaScript中两种链式调用实现代码
一.方法体内返回对象实例自身(this) 复制代码 代码如下: function ClassA(){ this.prop1 = null; this.prop2 = null; this.prop3 = null; } ClassA.prototype = { method1 : function(p1){ this.prop1 = p1; return this; }, method2 : function(p2){ this.prop2 = p2; return this; }, metho
-
Java及Android中常用链式调用写法简单示例
本文实例讲述了Java及Android中常用链式调用写法.分享给大家供大家参考,具体如下: 最近发现,目前大火的许多开源框架中,大多都使用了一种"(方法).(方法).(方法)"的形式进行调用,最典型的就是RxJava.android中AlertDialog控件的源码也是这种形式的.查阅可知,大家把它叫做链式调用."行动是检验程序的唯一标准"0.0!查了.说了那么多,还是得自己写个例子并运行出预期的效果. /** * * 链式调用 * * @author k.k *
随机推荐
- SQLite3的绑定函数族使用与其注意事项详解
- iOS贝塞尔曲线画哆啦A梦的代码实例
- c# 多线程编程 入门篇
- 百度UEditor编辑器使用教程与使用方法(图文)
- DB2专家王云谈商业智能BI
- 利用JAVA实现DES加密算法
- Python中用Ctrl+C终止多线程程序的问题解决
- asp.net GridView控件中模板列CheckBox全选、反选、取消
- bootstrap中的 form表单属性role="form"的作用详解
- asp.net实现非常实用的自定义页面基类(附源码)
- 自定义ListView实现拖拽ListItem项交换位置(附源码)
- php 邮件发送问题解决
- redis密码设置、访问权限控制等安全设置
- 探讨js中的双感叹号判断
- JavaScript 组件之旅(二)编码实现和算法
- Android实现新浪微博一键分享的实例代码
- Android自定义控件实现优雅的广告轮播图
- java计算百分比值的方法
- 用.NET创建Windows服务的方法第1/2页
- C++ CTreeview的checkbox使用方法