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

可选链(Optional Chaining)

可选链是一种请求或调用属性,方法,子脚本的过程。

可选性体现于请求或调用的目标当前可能为nil.若不为nil则成功调用,否则返回nil并将链失效。

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

这里由于roomCount返回为nil 所以执行else语句为count赋值为-1.

标注:在Beta3版本发布时对Swift稍微进行了修改,nil变成了关键字,而不再存在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中的扩展可以做的事情:

--添加计算型属性和计算静态属性

--定义实例方法或类型方法

--提供新的构造器

--定义下标脚本

--定义和使用新的嵌套类型

--使一个已有类型符合某个协议

语法

使用关键字extension

extension SomeType { ... }

适配协议:

extension SomeType: SomeProtocol, AnotherProtocol { ... }

也称为在扩展中添加协议遵循者。

添加计算型属性

注意:扩展可以添加新的计算型属性,但是不能添加存储型属性,也不可以向已有属性添加属性观测器。

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

构造器

扩展能向类中添加新的便利构造器,但不能添加新的指定构造器或者析构函数。

若使用扩展提供了一个新的构造器,有责任保证构造过程中让所有的实例都完全初始化。

方法

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

也可以在扩展中修改实例

下标脚本

甚至还可以在扩展中增加嵌套类型。

示例代码请点击这里

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

时间: 2024-08-13 15:52:49

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

可选链

http://numbbbbb.gitbooks.io/-the-swift-programming-language-/content/chapter2/17_Optional_Chaining.html 本页包含内容: 可选链可替代强制解析 为可选链定义模型类 通过可选链调用属性 通过可选链调用方法 使用可选链调用下标脚本 连接多层链接 链接可选返回值的方法 可选链(Optional Chaining)是一种可以请求和调用属性.方法及下标脚本的过程,它的可选性体现于请求或调用的目标当前可能为

下表脚本和可选链

下标脚本 可以定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问对象.集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法.举例来说,用下标脚本访问一个数组(Array)实例中的元素可以这样写 someArray[index] ,访问字典(Dictionary)实例中的元素可以这样写someDictionary[key]. struct TimesTable { let multiplier: Int subscript(ind

可选链式调用

可选链式调用 可选链式调用是一种可以在当前值可能为 nil 的可选值上请求和调用属性.方法及下标的方法.如果可选值有值,那么调用就会成功:如果可选值是 nil,那么调用将返回 nil.多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为 nil,整个调用链都会失败,即返回 nil. 注意 Swift 的可选链式调用和 Objective-C 中向 nil 发送消息有些相像,但是 Swift 的可选链式调用可以应用于任意类型,并且能检查调用是否成功. 使用可选链式调用代替强制展开 通过在想

学习Swift -- 可选链

可空链式调用 可空链式调用是一种可以请求和调用属性.方法及下标的过程,它的可空性体现于请求或调用的目标当前可能为空(nil).如果可空的目标有值,那么调用就会成功:如果选择的目标为空(nil),那么这种调用将返回空(nil).多个连续的调用可以被链接在一起形成一个调用链,如果其中任何一个节点为空(nil)将导致整个链调用失败. 使用可空链式调用来强制展开 通过在想调用非空的属性.方法.或下标的可空值后面放一个问号,可以定义一个可空链.这一点很像在可空值后面放一个叹号(!)来强制展开其中值.它们的

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

可选链(Optional Chaining) 我们都知道"可选型"是什么.那么可选链又是什么,举个样例解释一下: struct MyName{ var name } struct MyInfo { var myName:MyName? = MyName() } class MyClass { var structInstance: MyInfo? = MyInfo() } 这里有两个结构体和一个类,当.这个类实例化的时候: var myInstance = MyClass() 全部的可

swift 笔记 (十六) —— 可选链

可选链(Optional Chaining) 我们都知道"可选型"是什么,那么可选链又是什么,举个例子解释一下: struct MyName{ var name } struct MyInfo { var myName:MyName? = MyName() } class MyClass { var structInstance: MyInfo? = MyInfo() } 这里有两个结构体和一个类,当,这个类实例化的时候: var myInstance = MyClass() 所有的可

[Swift]学习笔记-可选类型/可选链

可选类型/可选链                        Make-by-LJW ---转载请注明出处... 它的可选性体现于请求或调用的目标当前可能为空(nil) 如果可选的目标有值,那么调用就会成功: 如果选择的目标为空(nil),则这种调用将返回空(nil) 多次调用被链接在一起形成一个链,如果任何一个节点为空(nil)将导致整个链失效. 因为可选链的结果可能为nil,可能有值.因此它的返回值是一个可选类型. 可以通过判断返回是否有值来判断是否调用成功 有值,说明调用成功 为nil,

IOS开发语言Swift入门连载---可选链

IOS开发语言Swift入门连载-可选链 可选链(Optional Chaining) 是一种可以请求和调用属性.方法及下标脚本的过程,它的可选性体现于请求或调用的目标当前可能为空(nil ).如果可选的目标有值,那么调用就会成功:相反,如果选择的目标为空(nil ),则这种调用将返回空(nil ).多次请求或调用可以被链接在一起形成一个链,如果任何一个节点为空(nil )将导致整个链失效. 注意: 的可选链和 Objective-C 中的消息为空有些相像,但是 Swift 可以使用在任意类型中

Swift 2.0学习笔记(Day 26)——可选链

原创文章,欢迎转载.转载请注明:关东升的博客 在Swift程序表达式中会看到问号(?)和感叹号(!),它们代表什么含义呢?这些符号都与可选类型和可选链相关,下面来看看可选链. 可选链: 类图: 它们之间是典型的关联关系类图.这些类一般都是实体类,实体类是系统中的人.事.物.Employee通过dept属性与Department关联,Department通过comp属性与Company关联. 下面看示例代码: class Employee { var no: Int = 0 var name: S