可选链(Optional Chaining)
可选链是一种请求或调用属性。方法,子脚本的过程。
可选性体现于请求或调用的目标当前可能为nil.若不为nil则成功调用。否则返回nil并将链失效。
调用可选链的返回结果与原结果类型同样,可是被包装成为了一个可选类型Optional.
这里因为roomCount返回为nil 所以运行else语句为count赋值为-1.
标注:在Beta3版本号公布时对Swift略微进行了改动,nil变成了keyword,而不再存在NilType的nil了。
可选链能够连续多层调用,如果样例:
john.residence?.address?
.street?.description()
类型转换
类型转换是一种检查实例类型的方式,也是让实例作为父类或者子类的一种方式。
在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语法做出的改动,主要是为了区分左闭右闭还是右开。
也能够在扩展中改动实例
下标脚本
甚至还能够在扩展中添加嵌套类型。
以上就是本篇博客所有内容,欢迎勘误和讨论。