• 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语法做出的改动,主要是为了区分左闭右闭还是右开。

    也能够在扩展中改动实例



    下标脚本



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



    演示样例代码请点击这里



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

  • 相关阅读:
    Python 学习---------Day2
    算法入门笔记------------Day2
    Python 学习---------Day1
    算法入门笔记------------Day1
    从零系列--开发npm包(一)
    webpack2.0+ vue2.0
    gulp + angular + requirejs 简单学习
    MAC node + git + bower 简单安装
    通过docker image repository 获取docker imges id 并删除
    docker 安装vim
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6848675.html
Copyright © 2020-2023  润新知