博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift 可选类型-备
阅读量:7044 次
发布时间:2019-06-28

本文共 720 字,大约阅读时间需要 2 分钟。

我们先看看如下代码:

 

 
  1. var n1: Int = 10  
  2.   
  3. n1 = nil         //编译错误  
  4.   
  5.    
  6.   
  7. let str: String = nil    //编译错误  

 

 

 

 

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

 

 
  1. var n1: Int? = 10  
  2.   
  3. n1 = nil  
  4.   
  5.    
  6.   
  7. let str: String! = nil  

 

 

 

 

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

 

可选类型值拆包

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

 

 
  1. var n1: Int? = 10  
  2.   
  3. print(n1)  

 

 

 

 

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

 

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

 

 

 

 

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

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

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

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

看看下面代码:

 

 
    1. var n1: Int? = 10  
    2.   
    3. print(n1! + 100)     //显式拆包  
    4.   
    5.    
    6.   
    7. var n2: Int! = 100         
    8.   
    9. print(n2 + 200)          //隐式拆包  

转载地址:http://moqal.baihongyu.com/

你可能感兴趣的文章
php 从1加到100
查看>>
centos 解决error: rpmdbNextIterator问题 (转)
查看>>
SQL Server--获取磁盘空间使用情况
查看>>
jquery操作select(增加,删除,清空)
查看>>
ELK学习总结(3-3)elk的组合查询
查看>>
(八十六)使用系统自带的分享框架Social.framework
查看>>
RMAN兼容性、控制文件自动备份、保存时间、备份策略、备份脚本(二)
查看>>
webpack入门
查看>>
Kubernetes-Host网络模式应用
查看>>
1.1 Introduction中 Putting the Pieces Together官网剖析(博主推荐)
查看>>
SOA并不能解决高并发事务
查看>>
9.6智力题(一)——给定两条绳子,每条绳子燃烧殆尽正好用一个小时,用这两条绳子准确计时15分钟...
查看>>
启动redis
查看>>
Swift 互斥锁写法
查看>>
matlab中元胞数组的创建与内容读取
查看>>
P3390 【模板】矩阵快速幂
查看>>
DateFormatUtil格式化时间
查看>>
RPi 2B QEMU 模拟树莓派
查看>>
Asp.net Web Api开发(第四篇)Help Page配置和扩展
查看>>
Microsoft Visual C++ 9.0 is required Unable to find vcvarsall.bat 解决办法
查看>>