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

简介:

可选类型:

我们先看看如下代码:

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


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

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


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

 

可选类型值拆包

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

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


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

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


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

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

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

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

看看下面代码:

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


 

本文转自 tony关东升 51CTO博客,原文链接:http://blog.51cto.com/tonyguan/1746587,如需转载请自行联系原作者

相关文章
|
7月前
|
存储 Swift
在Swift编程语言中,浮点数类型
在Swift编程语言中,浮点数类型
93 6
|
7月前
|
存储 Swift iOS开发
在Swift编程语言中,集合类型`Set`
在Swift编程语言中,集合类型`Set`
61 2
|
7月前
|
Swift
在Swift编程语言中,整数类型
在Swift编程语言中,整数类型
79 1
|
存储 Swift C++
41 Swift不透明类型
Swift不透明类型
52 0
|
25天前
|
安全 开发工具 Swift
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发
Swift 是苹果公司开发的现代编程语言,具备高效、安全、简洁的特点,支持类型推断、闭包、泛型等特性,广泛应用于苹果各平台及服务器端开发。基础语法涵盖变量、常量、数据类型、运算符、控制流等,高级特性包括函数、闭包、类、结构体、协议和泛型。
25 2
|
1月前
|
Swift 索引 容器
Swift 泛型-扩展泛型类型
Swift 泛型-扩展泛型类型
25 2
|
1月前
|
Swift 索引
Swift 泛型-类型约束
Swift 泛型-类型约束
25 1
|
1月前
|
安全 Swift iOS开发
Swift 可选(Optionals)类型
10月更文挑战第24天
38 2
|
7月前
|
存储 安全 Swift
【Swift开发专栏】Swift中的集合类型:数组、字典与集合
【4月更文挑战第30天】本文探讨Swift的三种内置集合类型:数组、字典和集合。数组是有序元素集合,支持动态大小调整和类型安全;字典是无序键值对,适用于快速查找;集合是无序不重复元素集合,适合检查元素存在性和集合运算。理解这些特性和用法能提升Swift编程效率。
71 1
|
7月前
|
安全 Swift
【Swift开发专栏】Swift中的可选类型与解包
【4月更文挑战第30天】Swift的可选类型(Optional)用于表示变量可能无值,如用户未填写表单或空服务器数据。可选类型用问号(?)标记,状态可为包含值或nil。解包包括强制解包(!,可能触发运行时错误)、可选绑定(在if/while中安全解包)和隐式解包(声明时带!,使用时不需显式解包)。高级用法包括可选链式调用、空合并操作符(??)和可选类型比较。理解并恰当使用这些概念能提升代码的健壮性和安全性。
72 1