可选类型的介绍
-
建议:
- 可选类型时swift中较难理解的一个知识点
- 暂时先了解,多利用Xcode的提示来使用
- 随着学习的深入,慢慢理解其中的原理和好处
-
概念:
- 在OC开发中,如果一个变量暂停不使用,可以赋值为0(基本属性类型)或者赋值为空(对象类型)
- 在swift开发中,nil也是一个特殊的类型.因为和真实的类型不匹配是不能赋值的(swift是强类型语言)
- 但是开发中赋值nil,在所难免.因此推出了可选类型
-
可选类型的取值:
- 空值
- 有值
定义可选类型
定义一个可选类型有两种写法
- 最基本的写法
- 语法糖(常用)
// 错误写法
// let string : String = nil
// 正确写法:
// 注意:name的类型是一个可选类型,但是该可选类型中可以存放字符串.
// 写法一:定义可选类型
let name : Optional<String> = nil
// 写法二:定义可选类型,语法糖(常用)
let name : String? = nil
可选类型的使用
// 演练一:给可选类型赋值
// 定义可选类型
var string : Optional<String> = nil
// 给可选类型赋值
string = "Hello world"
// 打印结果
print(string)
// 结果:Optional("Hello world")\n
// 因为打印出来的是可选类型,所有会带Optional
// 演练二:取出可选类型的值
// 取出可选类型的真实值(解包)
print(string!)
// 结果:Hello world\n
// 注意:如果可选类型为nil,强制取出其中的值(解包),会出错
string = nil
print(string!) // 报错
// 正确写法:
if string != nil {
print(string!)
}
// * 可选绑定
// 可选绑定是swift中的简便写法:为了让在if语句中可以方便使用string
if let str = string {
print(str)
}
真实应用场景
目的:让代码更加严谨
- 错误写法
// *** 错误写法:***
// 通过该方法创建的URL,可能有值,也可能没有值.
// 如果返回值是nil时,就不能接收了(只有可选类型才能接收nil)
// 如果字符串中有中文,则返回值为nil,因此该方法的返回值就是一个可选类型,而使用一个NSURL类型接收是错误的
let url : NSURL = NSURL(string: "www.baidu.com")
在 swift Playground 中报错如下:
Playground execution failed: error: MyPlayground.playground:6:20: error: value of optional type 'NSURL?' not unwrapped; did you mean to use '!' or '?'?
let url : NSURL = NSURL(string: "www.baidu.com")
^
!
- 正确写法
// 正确写法:使用可选类型来接收
let url : NSURL? = NSURL(string: "www.baidu.com")
// 该方式利用类型推导
let url = NSURL(string: "www.baidu.com")
- 可选绑定的应用
// 通过url来创建request对象:在使用可选类型前要先进行判断是否有值
// 该语法成为可选绑定(如果url有值就解包赋值给tempURL,并且执行{})
if let tempUrl = url {
let request = NSURLRequest(URL: tempUrl)
}
- 系列文章
01 Swift最基本的语法变化
02 Swift中的变量和常量
03 Swift中的数据类型
04 Swift逻辑分支
05 Swift中的循环
06 Switf中的字符串
07 Swift 数组
08 Swift字典
09 Swift 元组
10 Swift 可选类型
11 Swift 类型转化
12 Swift 函数
13 Swift 枚举类型
14 Swift 结构体
15 Swift 类的定义
16 Swift 类的构造函数
17 Swift 类的析构函数
18 自动引用计数
19 Swift 可选链
20 协议
21 闭包
22 Swift 懒加载
23 Swift 注释