002-可选项解包

1、可选项强行解包

使用!来给可选项解包

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        demo(x: 10, y: 20)
    }

    func demo(x:Int?, y:Int?) {
        //直接进行强行解包
        print(x! + y!)//输出结果:30
    }

2、但是这样直接使用!来强行解包是有风险得:如果传入一个空值,程序就会崩溃

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        demo(x: 10, y: nil)
    }

    func demo(x:Int?, y:Int?) {
        //直接进行强行解包
        print(x! + y!)//因为y:nil,因为在swift中不同的数据类型是不能进行计算的所以会崩溃
    }

3、解决强行解包带来的风险,使用??来解决可选项的解包

??是一个简单的 三目运算。如果有值,使用值,如果没有值,使用 ?? 后面的内容替代

override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        demo1(x: 10, y: nil)
    }
    
    func demo1(x:Int?, y:Int?) {
        
        print((x ?? 0) + (y ?? 0))
        //输出结果:10
    }

小结:使用??就可以解决强行解包带来的风险

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,949评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,819评论 19 139
  • Simple-Sharding是一款基于JDBC API开发、简单易用的分库分表中间件,目标是通过较少的代码来揭示...
    Yuan2021阅读 12,815评论 4 33
  • 1.css书写方式 书写优先级(同等优先级): !important > 行内 > 外链 = 内嵌 选择器优先级:...
    前端雨阅读 1,423评论 0 0
  • 前记: 2012年第一次自由行从驴友那知道了潜水,可以系统学习考证书。2013年暑假抢到了飞曼谷首航特价...
    chaiweiwei阅读 6,936评论 0 5

友情链接更多精彩内容