可选链(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. CVS在update时状态status

    cvs update -Ad 时,terminal 会display如下: P xx.v P xx.c ? xx.v ? xx.c A xx.v M xx.v U xx.v C xx.v 第一个字母: ...

  2. Python Importlib模块与__import__详解

    Importlib模块与__import__都可以通过过字符串来导入另外一个模块,但在用法上和本质上都有很大的不同. 以一个例子为证: 以下为我的工程目录结构: lib/test.py: name = ...

  3. 通过 PC 远程控制 Android 的应用 -- 可以将手机屏幕投射显示到电脑上

    测试结果中的部分测试图:Mobizen手机界面: 电脑界面: 主界面 视频 全屏视频 WebKey手机界面: 电脑界面: AirMore手机界面: 电脑界面:主界面 镜像 全屏镜像 Airdroid手 ...

  4. 03007_HttpServlet

    1.创建 new---Servlet package com.gzdlh.servlet; import java.io.IOException; import javax.servlet.Servl ...

  5. Mac 文档阅读软件Dash软件破解版

    1.Dash 破解版链接 Mac 上阅读开发文档的软件:支持java.spring.springBoot等.百度网盘下载链接和密码如下. 链接:https://pan.baidu.com/s/1RWM ...

  6. python 中zip()函数的使用

    zip(*iterables)函数的定义: zip()函数的对象Iterables,iterables可以有多个参数(元组,列表等可迭代对象)组成.通过zip()函数返回一组元组数据,每个元组中的第i ...

  7. Clickomania(区间DP)

    描述 Clickomania is a puzzle in which one starts with a rectangular grid of cells of different colours ...

  8. app审核相关

    app加急审核通道:https://developer.apple.com/contact/app-store/?topic=expedite

  9. xcode错误-第三方的东西他不支持

    ld:' /用户/ tanqihong /桌面/金粒子公司/金粒子公司/ Carloans / Carloans /第三/ TongLianPay / lib_release / libAPayLib ...

  10. BZOJ 4161 Shlw loves matrixI ——特征多项式

    矩阵乘法递推的新姿势. 叉姐论文里有讲到 利用特征多项式进行递推,然后可以做到k^2logn #include <cstdio> #include <cstring> #inc ...