美文网首页
Swift 笔记《 as解析, 中 _ 和 !和 ? 分别是什么

Swift 笔记《 as解析, 中 _ 和 !和 ? 分别是什么

作者: 失忆的程序员 | 来源:发表于2021-11-08 16:11 被阅读0次
    super dev.jpg

    ============ as 解析 ============

    类型检查

    1、is

    is操作符可以判断一个实例是否是某个类的类型,如果是目标类型,结果返回true。 运用场景,类的多态性,判断一个父类实例的真正类型是不是子类类型。
    类型转换:对象类型转换一定发生在继承的前提下

    2、as 向上转换

    仅仅应用于向上转换(子类类型转换为父类类型 - upcast少见), 比如
    (Student子类 -> Person父类)
    let p1 : Student = Student(xx,xx,xx)
    let p11: Person = p1 as Person // as Person可以省略

    3、as!向下转换 拆包

    在类型转换过程中对可选值进行拆包,转换结果是非可选类型:
    将非可选类型转换为非可选类型
    将可选类型转换为非可选类型

    --转换过程中,不能转换为目标类型的 会出现运行时错误。如果可选类型为nil转换为非可选类型也是会报错

    4、as?向下转换 不拆包

    在类型转换过程中不进行拆包,转换的结果是可选类型:
    将非可选类型转换为可选类型
    将可选类型转换为可选类型

    --转换过程中,不能转换为目标类型的 不会出现运行时错误,结果是nil。如果可选类型为nil转换为可选类型也不会报错,转换之后的值也为nil。

    ==============================

    ====== 中 _ 和 !和 ? 分别是什么 ======

    ==============================

    1、在swift中有么一个“_”符号,具体例子如下。
    func greet(_ person: String, on day: String) -> String {
        return "Hello \(person), today is \(day)."
    }
    

    分析:使用_代表忽略(不使用)参数标签。

    2.!和?是什么东西呢?

    ? 和 ! 其实分别是Swift语言中对一种可选类型( Optional) 操作的语法糖。
    ?是一种判断后再拆包的语法糖
    !是一种强制拆包的语法糖
    当你不确定有值的时候就可以用 ?
    当你确定有值的时候可以用 !

    例如: var name: String? Optional其实是个enum,里面有None和Some两种类型。
    其实所谓的nil就是Optional.None , 非nil就是Optional.Some,
    然后会通过Some(T)包装(wrap)原始值,
    这也是为什么在使用Optional的时候要拆包(从enum里取出来原始值)的原因。

    官方api.png

    ?的几种使用场景:
    1.声明Optional值变量
    2.用在对Optional值操作中,用来判断是否能响应后面的操作
    3.用于安全调用protocol的optional方法
    4.使用 as? 向下转型(Downcast)

    !的使用场景
    1.强制对Optional值进行拆包(unwrap)
    2.声明Implicitly Unwrapped Optionals值,一般用于类中的属性

    guard

    与if语句相同的是,guard也是基于一个表达式的布尔值去判断一段代码是否该被执行。
    与if语句不同的是,guard只有在条件不满足的时候才会执行这段代码。
    你可以把guard近似的看做是Assert,但是你可以优雅的退出而非崩溃。

    相关文章

      网友评论

          本文标题:Swift 笔记《 as解析, 中 _ 和 !和 ? 分别是什么

          本文链接:https://www.haomeiwen.com/subject/jsbuzltx.html