• 《从零开始学Swift》学习笔记(Day 27)——可选类型


    原创文章,欢迎转载。转载请注明:关东升的博客

     

    可选类型:

    我们先看看如下代码:

    var n1: Int = 10
    n1 = nil         //编译错误
     
    let str: String = nil    //编译错误

    Int和String类型不能接受nil的,但程序运行过程中有时被复制给nil是在所难免的,Swift为每一种数据类型提供一种可选类型(optional),即在某个数据类型后面加上问号(?)或感叹号(!),修改前文示例代码:

    var n1: Int? = 10
    n1 = nil
     
    let str: String! = nil


    Int?和String!都是原有类型Int和String可选类型,它们可以接受nil。 

    可选类型值拆包

    在可选类型的问号(?)或感叹号(!)究竟有什么区别呢?这与可选类型的“拆包”(unwrapping)有关,拆包是将可选类型变成普通类型,如果我们直接打印非空的可选类型值,代码如下:

    var n1: Int? = 10
    print(n1)

    输出的结果是Optional(10),而非10。所以试图计算表达式n1 + 100会发生编译错误,代码如下:

    var n1: Int? = 10
    print(n1 + 100)      //发生编译错误


    需要对可选类型值进行“拆包”是必要地。

    “拆包”分为显示拆包和隐性拆包。

    使用问号(?)声明的可选类型,在拆包时需要使用感叹号(!),这种拆包方式称为“显式拆包”;

    使用感叹号(!)声明的可选类型,在拆包时可以不使用感叹号(!),这种表示方式称为“隐式拆包”。

    看看下面代码:

    var n1: Int? = 10
    print(n1! + 100)     //显式拆包
     
    var n2: Int! = 100   
    print(n2 + 200)          //隐式拆包 


    欢迎关注关东升新浪微博@tony_关东升。
    关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
                                                              ​
    更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
    智捷课堂论坛网站:http://51work6.com/forum.php

  • 相关阅读:
    Python(3)---从迭代器到异步IO
    并发访问sqlite数据库出现databse is locked的错误的一个解决办法
    基础概念2
    (已解决)Arduino mega2560 R3插在电脑上没有反应
    <Android 基础(二)> BroadcastReceiver
    unicode字符和多字节字符的相互转换接口
    PHP中XML和数组互相转换的方法
    java网络编程—TCP(1)
    Java EE的十三个技术规范
    <Android 基础(一)> Service
  • 原文地址:https://www.cnblogs.com/iOS-Blog/p/4910609.html
Copyright © 2020-2023  润新知