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

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

可选类型:java

咱们先看看以下代码:微信

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

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

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

Int?String!都是原有类型IntString可选类型,它们能够接受nil网站

 

可选类型值拆包spa

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

var n1: Int? = 10
print(n1)

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

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

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

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

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

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

看看下面代码:

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

 

 

 

欢迎关注关东升新浪微博@tony_ 关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 

更多精品iOSCocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php