Swift的可选链,类型转换和扩展

Posted clnchanpin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Swift的可选链,类型转换和扩展相关的知识,希望对你有一定的参考价值。


可选链(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的可选链,类型转换和扩展的主要内容,如果未能解决你的问题,请参考以下文章

猫猫学swift3.1可选类型_解包_可选链

猫猫学swift3.1可选类型_解包_可选链

Swift-类型转换(Type Casting)(十七)

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

Swift新手教程12-可选链

与 try 的可选绑定?并作为?仍然产生一个可选类型