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

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

 

可选类型:

我们先看看如下代码:

var n1: Int = 10

n1 = nil         //编译错误

 

let str: String = nil    //编译错误

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

var n1: Int? = 10

n1 = nil

 

let str: String! = nil

Int?String!都是原有类型IntString可选类型,它们可以接受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_关东升
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
 

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

 


http://www.niftyadmin.cn/n/1036472.html

相关文章

C语言实现<冒泡排序>

C语言实现<冒泡排序> 你们好&#xff01;我是飞人&#xff01;此篇文章是我进入IT行业第一篇博客&#xff0c;若有不妥之处&#xff0c;欢迎指点。 此篇讲解冒泡排序的原理&#xff0c;以及如何用C语言去实现。希望能够给各位读者带来一定的认识。 整体思路 例子&…

《从零开始学Swift》学习笔记(Day 28)——总结使用问号(?)和感叹号(!)

原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客在使用可选类型和可选链时&#xff0c;多次使用了问号&#xff08;?&#xff09;和感叹号&#xff08;!&#xff09;&#xff0c;但是它们的含义是不同的&#xff0c;下面我来详细说明一下。 1. 可选类型中的…

一篇文章看懂《qsort》快排的用法

一篇文章看懂《qsort》快排的用法前言一、库函数&#xff08;qsort&#xff09;的含义二、&#xff08;qsort&#xff09;函数的实现方式&#xff0c;话不多说&#xff0c;请看。1. 第一个参数2. 第二个参数3. 第三个参数4. 第四个参数1). 函数的参数2). 这第四个参数的重点三、…

《从零开始学Swift》学习笔记(Day 29)——访问级别

原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客访问级别&#xff1a;Swift提供了3种不同访问级别&#xff0c;对应的访问修饰符为&#xff1a;public、internal和private。这些访问修饰符可以修饰类、结构体、枚举等面向对象的类型&#xff0c;还可以修饰变…

库函数《qsort》的模拟实现,原来如此简单

库函数《qsort》的模拟实现前言一、qsort函数二、qsort函数实现思路1. 底层原理2. 函数传参1). 第一个参数2). 第二个参数3). 第三个参数4). 第四个参数三、局部函数实现四、全部代码汇集五、总结前言 我们在上一篇博客讲解了库函数qsort的使用&#xff0c;今天我为大家带来qs…

《从零开始学Swift》学习笔记(Day 30)——选择类还是结构体呢?

原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客类和结构体非常相似&#xff0c;很多情况下没有区别。如果你是设计人员在进行系统设计时候&#xff0c;是将某种类型设计成为类还是结构体&#xff1f; 类和结构体异同&#xff1a;类和结构体都有如下功能&am…

一题做懂“子网划分”

子网划分详解一、 子网划分的作用二、 常见的几种名词概念1. DNS域名服务器2. 子网掩码3. 默认网关4. 广播地址&#xff08;号&#xff09;与网络地址&#xff08;号&#xff09;三、子网划分之借位一、 子网划分的作用 子网划分的作用&#xff1a; 1、将ABC三个类别的地址在利…

《从零开始学Swift》学习笔记(Day 31)——存储属性

原创文章&#xff0c;欢迎转载。转载请注明&#xff1a;关东升的博客 Swift中的属性分为存储属性和计算属性&#xff0c;存储属性就是Objective-C中的数据成员&#xff0c;计算属性不存储数据&#xff0c;但可以通过计算其他属性返回数据。存储属性可以存储数据&#xff0c;分…