• Swift中的可选链


    自述

    _____________________________________________

    前段时间一直在忙公司项目上的事情,很久没有这样闲下来写博文
    觉得Swift是一种趋势,也一直在学习当中, 在学习的过程中,把自己的感悟和
    总结写在这里,就当是自己一个存放笔记的地方, 顺便对有需要这方面知
    识的朋友的一种分享.
    在学习过程中, 自己也写了一些demo,已经放在了GitHub上,有兴趣的
    朋友可以看一看
    https://github.com/CJGitH/QQMusic

    _____________________________________________

    那么,接下来进入正题,继续学习ing

    Swift中的可选链

    可选连的概念

    它的可选性体现于请求或调用的目标当前可能为空(nil)

    • 如果可选的目标有值,那么调用就会成功;
    • 如果选择的目标为空(nil),则这种调用将返回空(nil)
    • 多次调用被链接在一起形成一个链,如果任何一个节点为空(nil)将导致整个链失效。

    可选链的使用

    • 在可选类型后面放一个问号,可以定义一个可选链。
    • 这一点很像在可选值后面放一个叹号来强制拆得其封包内的值
    • 它们的主要的区别在于当可选值为空时可选链即刻失败
    • 然而一般的强制解析将会引发运行时错误。
    • 因为可选链的结果可能为nil,可能有值.因此它的返回值是一个可选类型.
    • 可以通过判断返回是否有值来判断是否调用成功
    • 有值,说明调用成功
    • 为nil,说明调用失败

    可选链的示例

    • 从可选链中取值
    • 示例描述: 人(Person)有一个狗(Dog),狗(Dog)有一个玩具(Toy),玩具有价格(price)
    • 使用代码描述上述信息
    // 1.定义类
    class Person {
        var name : String
        var dog : Dog?
    
        init(name : String) {
            self.name = name
        }
    }
    
    class Dog {
        var color : UIColor
        var toy : Toy?
    
        init(color : UIColor) {
            self.color = color
        }
    
        func runing() {
            print("跑起来")
        }
    }
    
    class Toy {
        var price : Double = 0.0
    }
    
    // 2.创建对象,并且设置对象之间的关系
    // 2.1.创建对象
    let person = Person(name: "小明")
    let dog = Dog(color: UIColor.yellowColor())
    let toy = Toy()
    toy.price = 100.0
    
    // 2.2.设置对象之间的关系
    person.dog = dog
    dog.toy = toy
    

    需求:获取小明的大黄宠物的玩具价格

    • 取出的值为可选类型,因为可选链中有一个可选类型为nil,则返回nil
    • 因此结果可能有值,可能为nil.因此是一个可选类型
    let price = person.dog?.toy?.price
    print(price) // Optional(100.0)
    
    
    • 需求:给小明的大黄一个新的玩具
    • 相当于给可选类型赋值
    person.dog?.toy = Toy()
    
    • 需求:让小明的狗跑起来
    • 如果可选类型有值,则会执行该方法
    • 如果可选类型为nil,则该方法不会执行
    person.dog?.runing()
    
  • 相关阅读:
    为什么说LD_LIBRARY_PATH不好
    linux c/c++ code统计耗时
    c++: abs() 与fabs() 的区别
    char代表有符号还是无符号?
    git三个小技巧:删除指定 commit、修改历史 commit 中的作者信息、合并某文件到当前分支
    vim选中字符复制/剪切/粘贴
    git rebase
    git打patch
    数据仓库生命周期工作箱 第六章 维度建模
    数据仓库生命周期工作箱 第二章 项目/项目群的启动与管理
  • 原文地址:https://www.cnblogs.com/chenjianjian/p/5505773.html
Copyright © 2020-2023  润新知