Swift新手教程12-可选链
可选链
原创Blog,转载请注明出处
我的博客地址
http://blog.csdn.net/hello_hwc
可选链提供一个一种可选的方式訪问对象的属性、方法、下标脚本,可选链的返回值一定是可选类型。
长处:替代强制解析(符号!,比如instance.location!.y),由于强制解析nil的值会导致执行期错误
我的心得:对一个链式调用,比方instance.Frame.Origin.x等非常长的调用,对可能是nil的部分加上?
比如,frame和Origin可能为nil。则这么使用instance.Frame?.origin?.x
可选链的特点:中间有一次可选的值为nil,那么整个可选链失效。返回nil
举个简单的样例就明确了
class A{
var varA:B?
}
class B{
var varB:C?
var varBArray = [D]()
subscript(index:Int)->D?{
if(index < varBArray.count){
return varBArray[index]
}
else{
return nil
}
}
}
class C{
var varC:String = "from C"
func printC(){
println(varC)
}
}
class D{
var varD1:Int = 10
var varD2:E = E()
}
class E{
func printE(){
println("from E")
}
}
var instance = A()
一、通过可选链调用属性
备注:因为返回可选类型,要用if let这种句式隐式解析
if let temp = instance.varA?.varB?.varC{
println(temp)
}
二、通过可选链调用方法
instance.varA?.varB?.printC()
三、通过可选链调用下标脚本
if let temp = instance.varA?
[5]?.varD1{
println(temp)
}
这里解释下为什么这么用
instance.varA?[5]是用可选链訪问下标脚本。返回D?,然后对返回的D?再通过可选链訪问,搜易訪问的时候是 instance.varA?[5]?.varD1
四、长的可选链调用
instance.varA?[5]?.varD2.printE()
Swift新手教程12-可选链的更多相关文章
- Swift新手教程系列5-函数+selector在swift中的使用方法
原创blog.转载请注明出处 近期在用swift写代码,尽管遇到一些问题,可是代码量确实减了不少. swfit新手教程系列会随着我使用swfit中的积累,不断地去修正更新 之前的教程 swift单例模 ...
- 【Swift学习】Swift编程之旅---可选链(二十一)
可选链Optional Chaining是一种可以在当前值可能为nil的可选值上请求和调用属性.方法及下标的方法.如果可选值有值,那么调用就会成功:如果可选值是nil,那么调用将返回nil.多个调用可 ...
- swift学习笔记之-可选链式调用
//可选链式调用 import UIKit /*可选链式调用(Optional Chaining) 1.在可选值上请求和调用该可选值的属性.方法及下标的方法,如果可选值有值,那么调用就会成功,返回可选 ...
- Unix/Linux环境C编程新手教程(12) openSUSECCPP以及Linux内核驱动开发环境搭建
1. openSUSE是一款优秀的linux. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRjYXN0Y3Bw/font/5a6L5L2T/font ...
- Swift新手教程3-字符串String
原创blog,转载请注明出处 String 在swfit中,String兼容Unicode的方式.用法和C语言类似. 注意 在Cocoa和Cocoa touch中,Swift的String,和Fo ...
- ios新开发语言swift 新手教程
http://gashero.iteye.com/blog/2075324 视频教程:http://edu.51cto.com/lesson/id-26464.html
- swift 雨燕 新手教程
Apple Swift编程语言新手教程 chox 2014-06-03 文件夹 简单介绍 入门 简单值 控制流 函数与闭包 对象与类 枚举与结构 1 简单介绍 今天凌晨Apple刚刚公布了Swif ...
- apple Swift语言新手教程
Apple Swift编程语言新手教程 文件夹 1 简单介绍 2 Swift入门 3 简单值 4 控制流 5 函数与闭包 6 对象与类 7 枚举与结构 1 ...
- 《从零开始学Swift》学习笔记(Day 26)——可选链
原创文章,欢迎转载.转载请注明:关东升的博客 在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之 ...
随机推荐
- RequireJS 与 SeaJS 的异同
相同之处 RequireJS 和 SeaJS 都是模块加载器,倡导的是一种模块化开发理念,核心价值是让 JavaScript 的模块化开发变得更简单自然. 不同之处 两者的区别如下: 定位有差异.Re ...
- Linux系统/etc/sysconfig目录下没有iptables文件
在新安装的linux系统中,防火墙默认是被禁掉的,一般也没有配置过任何防火墙的策略,所有不存在/etc/sysconfig/iptables文件. 解决办法: 1.键入以下命令,新建文件 2.复制以下 ...
- .NET开源免费的功能强大控件库
通信工具IM控件: http://www.cnblogs.com/hubro/p/4316315.html 360安全卫士及QQ部分控件经典皮肤下载 http://www.sufeinet.com/t ...
- CF(D. Fibonacci Sums)dp计数
题目链接:http://codeforces.com/contest/126/problem/D 题意:一个数能够有多种由互不同样的斐波那契数组成的情况: 解法:dp,easy证明:每一个数通过贪心能 ...
- scala类型系统 type关键字
和c里的type有点像. scala里的类型,除了在定义class,trait,object时会产生类型,还可以通过type关键字来声明类型. type相当于声明一个类型别名: scala> t ...
- vue组件属性中字符串如何拼接变量?
不得不说,对于水平只有jquery的vue初学者来说,vue的图片加载实现确实挺坑的,在文档中也没有看到说明.经过百度之后终于知道了什么情况. 首先: 这样是没问题的: <img src=&qu ...
- 2017.12.27 sqlSessionFactory和sqlSession(to be continued)
参考来自:<深入浅出MyBatis技术原理与实践-第6章 > 1.SqlSessionFactory SqlSessionFactory是一个接口,最重要的功能是提供SqlSession. ...
- [Functional Programming ADT] Combine Multiple State ADT Based Redux Reducers
Redux provides a convenient helper for combining many reducers called combineReducer, but it focuses ...
- C++ Primer笔记2_四种类型转换_异常机制
1.类型转换 命名的强制类型转换: 有static_cast.dynamic_cast.const_cast.reinterpret_cast static_cast: 编译器隐式运行的不论什么类型转 ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何声明定时器,使用定时器TON模块 TC3
TON功能块功能: 当输入为高电平时,计时器开始计时,CV表示计时器计时的当前值,而PV则是计时的目标值,当CV的值等于PV的值时,输出置1. 在主程序接下去的地方按下F2并添加TON功能块. ...