zoukankan      html  css  js  c++  java
  • Swift16-可选链式调用

    使用可选链式调用代替强制展开、为可选链式调用定义模型类、通过可选链式调用访问属性、通过可选链式调用调用方法、通过可选链式调用访问下标、连接多层可选链式调用、在方法的可选返回值上进行可选链式调用。

    可选链式调用是一种可以在当前值可能为nil的可选值上请求和调用属性、方法及下标的方法。如果可选值有值,那么调用就会成功;如果可选值是nil,那么调用将返回nil。多个调用可以连接在一起形成一个调用链,如果其中任何一个节点为nil,整个调用链都会失败,即返回nil

    使用可选链式调用代替强制展开:

    通过在想调用的属性、方法、或下标的可选值后面放一个问号(?),可以定义一个可选链。这与可选值后面放一个叹号(!)来强制展开它的值很相似。它们的主要区别在于当可选值为空时可选链式调用只会调用失败,然而强制展开将会触发运行时错误。

    为了反映可选链式调用可以在空值(nil)上调用的事实,不论这个调用的属性、方法及下标返回的值是不是可选值,它的返回结果都是一个可选值。可以利用这个返回值来判断可选链式调用是否调用成功,如果调用有返回值则说明调用成功,返回nil则说明调用失败。

    可选链式调用的返回结果与原本的返回结果具有相同的类型,但是被包装成了一个可选值。例如,使用可选链式调用访问属性,当可选链式调用成功时,如果属性原本的返回结果是Int类型,则会变为Int?类型。

    class A{
      var a:B?
    }
    class B{
      var b:Int=9
    }
    var t=A()
    t.a=B()
    print(t.a!.b)  //打印9
    print(t.a?.b)  //打印Optional(9)

    可选链式调用的问号不能直接用于一级类型,它需要间接地作用在二级或以上的类型,如类的属性、方法、下标等。且这些属性、方法和下标都是可选类型。如 a?.b

    如下情况出错(var a:Int?; print(a?)  //不能直接一级访问一个可选属性)

    为可选链式调用定义模型类:

    通过使用可选链式调用可以调用多层属性、方法和下标。这样可以在复杂的模型中向下访问各种子属性,并且判断能否访问子属性的属性、方法或下标。

    a.b?.c

    a.b?.d()

    a.b?[n]

    //这三个访问成功的前提是a.b不为空nil

    //a是可去掉的,二级调用:b->c,d,[]

    连接多层可选链式调用:

    可以通过连接多个可选链式调用在更深的模型层级中访问属性、方法及下标。多层可选链式调用不会增加返回值的可选层级。

    1)如果访问的值不是可选的,可选链式调用将会返回可选值。

    2)如果访问的值就是可选的,可选链式调用不会让可选返回值变得“更可选”。Int?仍为Int?

  • 相关阅读:
    Django【进阶篇-缓存类型】
    深度剖析Kubernetes API Server三部曲
    深度剖析Kubernetes API Server三部曲
    深度剖析Kubernetes API Server三部曲
    Istio技术与实践03:最佳实践之sidecar自动注入
    原来你是这样的PaaS!
    5分钟APIG实战: 使用Rust语言快速构建API能力开放
    Log4J日志配置详解
    cookie是如何保存到客户端,又是如何发送到服务端
    session cookie
  • 原文地址:https://www.cnblogs.com/cjj-ggboy/p/12860433.html
Copyright © 2011-2022 走看看