可选链(Optional Chaining)


可选链是一种请求或调用属性。方法,子脚本的过程。
可选性体现于请求或调用的目标当前可能为nil.若不为nil则成功调用。否则返回nil并将链失效。


调用可选链的返回结果与原结果类型同样,可是被包装成为了一个可选类型Optional.



这里因为roomCount返回为nil 所以运行else语句为count赋值为-1.

标注:在Beta3版本号公布时对Swift略微进行了改动,nil变成了keyword,而不再存在NilType的nil了。

可选链能够连续多层调用,如果样例:
john.residence?.address?

.street?.description()

若有方法返回optional则?

在括号后面。



类型转换


类型转换是一种检查实例类型的方式,也是让实例作为父类或者子类的一种方式。

在Swift中使用is或as来判断和判断他们是否为某个类或者某个协议。

is用于检查一个实例是否属于特定子类型,若果是则返回true不是则为false.注意这里是特定子类型。假设你定义了一个类并实例化它。然后检查它是否is这个类,编译器会报错告诉你这个is总是返回true.





向下转型


由于向下转型可能会失败,类型转换操作符会有两种不同的形式。

as? 返回一个optional value。即不成功返回nil。
as   则把向下转型和强制解包结合,不成功则执行时错误。



向下转换和OC,Java中的强转一样。并没有真正的改变实例。仅仅是简单的把它告诉编译器当做这个类来使用而已。



Any和AnyObject


Swift中没有像NSObject一样的全部类基类。

但有AnyObject能够表示不论什么class类型的实例。Any能够表示不论什么类型,除了方法类型。

当须要使用CocoaAPIs,一般接收一个[AnyObject]的数组。由于oc中没有明白类型的数组。当中存储的指针能够指向不论什么类的实例。


使用Any类型来和混合的不同类型一起工作,包含非class.




嵌套类型


Swift中是支持嵌套类型的。就像支持嵌套函数一样灵活。

你能够在枚举,类和结构体中定义支持嵌套的类型。



扩展(Extension)


扩展就是类似于Objective-C中的Category,只是Swift中的扩展没有名字。

以下列举Swift中的扩展能够做的事情:

--加入计算型属性和计算静态属性
--定义实例方法或类型方法
--提供新的构造器
--定义下标脚本
--定义和使用新的嵌套类型
--使一个已有类型符合某个协议


语法


使用keywordextension
extension SomeType { ... }

适配协议:
extension SomeType: SomeProtocol, AnotherProtocol { ... }
也称为在扩展中加入协议遵循者。

加入计算型属性




注意:扩展能够加入新的计算型属性,可是不能加入存储型属性,也不能够向已有属性加入属性观測器。

当然我们能够通过设置关联引用的方式来加入一个“属性”。须要用到Swift调用CPointer的知识以及objc/runtime的关联引用,当然这也不是真正意义的属性。而仅仅是一个关联。



构造器


扩展能向类中加入新的便利构造器。但不能加入新的指定构造器或者析构函数。
若使用扩展提供了一个新的构造器,有责任保证构造过程中让全部的实例都全然初始化。


方法




使用扩展为Int添加了一个方法,注意到这里的..<代替了当初的.. 这是在beta3时苹果对Swift语法做出的改动,主要是为了区分左闭右闭还是右开。

也能够在扩展中改动实例



下标脚本



甚至还能够在扩展中添加嵌套类型。



演示样例代码请点击这里



以上就是本篇博客所有内容,欢迎勘误和讨论。

Swift的可选链,类型转换和扩展的更多相关文章

  1. swift 学习- 19 -- 可选链式调用

    // 可选链式调用 是一种在当前值可能为 nil 的可选值上请求 和 调用属性, 方法以及下标, 如果 可选值有值, 那么调用就会成功, 如果可选值是 nil, 那么就会将返回 nil , // 多个 ...

  2. Swift中的可选链与内存管理(干货系列)

    干货之前:补充一下可选链(optional chain) class A { var p: B? } class B { var p: C? } class C { func cm() -> S ...

  3. 【Swift学习】Swift编程之旅---可选链(二十一)

    可选链Optional Chaining是一种可以在当前值可能为nil的可选值上请求和调用属性.方法及下标的方法.如果可选值有值,那么调用就会成功:如果可选值是nil,那么调用将返回nil.多个调用可 ...

  4. 学习Swift -- 可选链

    可空链式调用 可空链式调用是一种可以请求和调用属性.方法及下标的过程,它的可空性体现于请求或调用的目标当前可能为空(nil).如果可空的目标有值,那么调用就会成功:如果选择的目标为空(nil),那么这 ...

  5. Swift 可选链-备

    在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之间是典型的关联关系类图.这些类一般都是实体类, ...

  6. swift 注意事项 (十六) —— 可选链

    可选链(Optional Chaining) 我们都知道"可选型"是什么.那么可选链又是什么,举个样例解释一下: struct MyName{      var name } st ...

  7. 《从零开始学Swift》学习笔记(Day 26)——可选链

    原创文章,欢迎转载.转载请注明:关东升的博客 在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之 ...

  8. Swift 可选链

    可选链(Optional Chaining)是一种可以请求和调用属性.方法和子脚本的过程,用于请求或调用的目标可能为nil. 可选链返回两个值: 如果目标有值,调用就会成功,返回该值 如果目标为nil ...

  9. swift学习笔记之-可选链式调用

    //可选链式调用 import UIKit /*可选链式调用(Optional Chaining) 1.在可选值上请求和调用该可选值的属性.方法及下标的方法,如果可选值有值,那么调用就会成功,返回可选 ...

随机推荐

  1. java 获取音频文件时长

    需要导入jar包:jave 1.0.2 jar 如果是maven项目,在pom.xml文件中添加: <dependency> <groupId>it.sauronsoftwar ...

  2. css 元素垂直居中

    通用 <div id="parent"> <div id="child">Content here</div> </d ...

  3. Linux下制作不用密码可立即登录的SSH用户

    一.客户端建立两把钥匙 (1)本例以客户端的monkey用户为例,首先切换到~/.ssh目录下,如果没有该目录的话,需要进行新建 cd ~ mkdir .ssh chmod 700 .ssh cd ~ ...

  4. python 四——线程、进程、协程

    内容概要 1.进程与线程优.缺点的比较 2.适用情况 3.线程 线程的创建 setDaemon join event RLock 队列 4.进程 创建进程 setDaemon join 线程与进程,数 ...

  5. 【LeetCode】Same Tree(相同的树)

    这道题是LeetCode里的第100道题. 这是题目: 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 1: 输入: 1 1 ...

  6. 在使用Cocos2d-JS 开发过程中需要用到的单体设计模式

    JavaScript 单体模式的一种实现 T.getInstance = (function () { var instance = null; return function () { return ...

  7. ER模型图工具:PowerDesigner

    导读:开始是想一个阶段一个阶段的写文档,再写了可行性分析报告之后,发现这种方法整体性不强,写出来的文档也总是有考虑不周的地方.后来,就看完了全部的软工视频再写.现在该写项目开发总结报告了.在写文档的过 ...

  8. POJ-2187 Beauty Contest,旋转卡壳求解平面最远点对!

     凸包(旋转卡壳) 大概理解了凸包A了两道模板题之后在去吃饭的路上想了想什么叫旋转卡壳呢?回来无聊就搜了一下,结果发现其范围真广. 凸包: 凸包就是给定平面图上的一些点集(二维图包),然后求点集组成的 ...

  9. HackerRank# Candies

    原题地址 LeetCode上也有这道题,直接扫一遍就行了,连数组都不用开,感觉像是蕴含了某种动归的思想在里面,要不怎么是个动归题呢 代码: #include <cmath> #includ ...

  10. bzoj2324 [ZJOI2011]营救皮卡丘 费用流

    [ZJOI2011]营救皮卡丘 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2653  Solved: 1101[Submit][Status][D ...