文档章节

swift学习日记-可选链(optional chaining)

一根聪
 一根聪
发布于 2016/04/12 00:36
字数 410
阅读 12
收藏 0

可选链式调用(Optional Chainingwiki

 

可选链式调用:是一种可以在当前值可能为nil的可选值请求和调用属性、方法或者下标。与Objective-C中向nil发送消息有些相像,但是swift可选链式调用可以作用于任何类型,并且能检查调用是否成功。

 

1 使用可选链式调用代替强制展开

通过在想调用的属性、方法或下标的可选值(optional value)后面跟一个?,可以定义一个可选链,与!类似,不同之处在于!可能会出发运行时错误。

class Person {

    var name: String?

}

 

let person = Person()

print(person.name?.characters.count// nil

print(person.name!.characters.count// 运行时错误

 

2 为可选链式调用定义模型类型

通过使用可选链式调用可以调用多层属性、方法和下标。这样可以在复杂的模型中向下访问各种子属性,并且判断能否访问子属性的属性、方法或下标。

 

3 通过可选链式调用访问属性

4 通过可选链式调用调用方法

5 通过可选链式访问下标

如下例子 ,存在一个Student类和一个Teacher类

class Student {

    var name: String?

    

    func read() {

        print("read book")

    }

}

 

class Teacher {

    var students: [Student]?

    var numberOfStudent: Int? {

        get {

            return students?.count

        }

    }

    

    subscript (i: Int) -> Student? {

        return self.students?[i]

    }

}

 

let teacher = Teacher()

// 访问属性

print("number Of Student: \(teacher.numberOfStudent)")

// 访问方法

teacher.students?[0].read()

// 访问下标

print("first Student: \(teacher[0])")


© 著作权归作者所有

一根聪
粉丝 12
博文 20
码字总数 19408
作品 0
成都
私信 提问
重读 Swift 之一:Optional(可选型)

之前学习 Swift 的时候都是比较破碎,零零散散,以至于有些地方学习的不够透彻。所以趁最近有时间,就开始重新学习 Swift ,从最基本的开始学习,希望能深入理解,见微知著! 关于 Swift 我们...

HenryCheng
2016/08/05
0
0
Swift 可选值(Optional Values)介绍

Optional的定义 Optional也是Objective-C没有的数据类型,是苹果引入到Swift语 言中的全新类型,它的特点就和它的名字一样:可以有值,也可以没有值,当它没有值时,就是nil。此外,Swift的n...

_xiaotudou
2016/05/15
47
0
Swift可选值OptionalOptional 问号 感叹号

Swift 可选值(Optional Values)介绍 Optional也是Objective-C没有的数据类型,是苹果引入到Swift语言中的全新类型,它的特点就和它的名字一样:可以有值,也可以没有值,当它没有值时,就是n...

法斗斗
2016/01/04
79
0
Swift专题讲解十七——Optional链

Swift专题讲解十七——Optional链 Swift中的Optional值有这样的特性,当对其进行可选拆包时,即使用?进行Optional类型值的取值时,如果Optional值不为nil,则会返回原始类型的数据值,如果为...

珲少
2016/05/24
100
0
【Swift 2】Optional Chaining、Nil-Coalesce

自判断链接(Optional Chaining)是一种可以请求和调用属性、方法及子脚本的过程,它的自判断性体现于请求或调用的目标当前可能为空( nil )。如果自判断的目标有值,那么调用就会成功;相反...

iNiL0119
2016/07/03
24
1

没有更多内容

加载失败,请刷新页面

加载更多

OSChina 周日乱弹 —— 我,小小编辑,食人族酋长

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @宇辰OSC :分享娃娃的单曲《飘洋过海来看你》: #今日歌曲推荐# 《飘洋过海来看你》- 娃娃 手机党少年们想听歌,请使劲儿戳(这里) @宇辰OSC...

小小编辑
今天
537
10
MongoDB系列-- SpringBoot 中对 MongoDB 的 基本操作

SpringBoot 中对 MongoDB 的 基本操作 Database 库的创建 首先 在MongoDB 操作客户端 Robo 3T 中 创建数据库: 增加用户User: 创建 Collections 集合(类似mysql 中的 表): 后面我们大部分都...

TcWong
今天
31
0
spring cloud

一、从面试题入手 1.1、什么事微服务 1.2、微服务之间如何独立通讯的 1.3、springCloud和Dubbo有哪些区别 1.通信机制:DUbbo基于RPC远程过程调用;微服务cloud基于http restFUL API 1.4、spr...

榴莲黑芝麻糊
今天
17
0
Executor线程池原理与源码解读

线程池为线程生命周期的开销和资源不足问题提供了解决方 案。通过对多个任务重用线程,线程创建的开销被分摊到了多个任务上。 线程实现方式 Thread、Runnable、Callable //实现Runnable接口的...

小强的进阶之路
昨天
49
0
maven 环境隔离

解决问题 即 在 resource 文件夹下面 ,新增对应的资源配置文件夹,对应 开发,测试,生产的不同的配置内容 <resources> <resource> <directory>src/main/resources.${deplo......

之渊
昨天
56
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部