Swift实用小册15:OptionalChaining可选链的使用

简介: 可选链,是一种以安全的方式访问类的对象属性的方式。可选链的作用,其实是为了在我们访问某个对象属性时,防止由于返回结果为nil,即属性不存在而引发的系统报错或者闪退,因为Swift不能空调用。

image.png在本章中,你将学会OptionalChaining可选链的使用方法。

前言


Apple官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift语言的一些概念和用法,方便大家更好地学习和掌握Swift语言。

这同时也是对自己学习Swift语言过程的知识整理。

如有错误,以你为准。

可选链的定义


可选链,是一种以安全的方式访问类的对象属性的方式。

可选链的作用,其实是为了在我们访问某个对象属性时,防止由于返回结果为nil,即属性不存在而引发的系统报错或者闪退,因为Swift不能空调用。

可选链的使用


我们新建一个PlayGround项目,命名为SwiftOptionalChaining

image.png

可选链的使用方式是在属性、方法、或下标的可选值后面放一个问号“”,可选链可以将返回的结果包装成可选项,如果可选项有值,那么调用就会成功,输出的结果就会被包装成可选项。但如果可选项的值是 nil,那么调用就会失败并返回 nil。示例:

import UIKit
class Person {
    var name: String = "文如秋雨"
    var age: Int = 26
}
var person: Person? = Person()
if ((person?.name) != nil)&&(person?.age) != nil {
    print("name和age的值不为空")
} else {
    print("name和age的值为空")
}

image.png

上述代码中,我们定义了一个Person类,在Person类中我们声明了两个变量:nameage,确定好类型并赋予了参数值。

如果我们需要访问Person类的对象时,我们声明一个类型的Person可选项的person变量访问Person类。

我们这里加一层判断,如果nameage的可选项返回值不为空,我们打印输出下内容,如果为空,我们也打印输出下内容。

这种方式能让我们快速定位到问题点,特别是当我们是通过网络请求或者接口接收json格式的数据时,我们就需要通过可选链式调用访问对应的属性。示例:

let json = """
{
"name": "Ricardo",
"country": "China",
"city": "Guangzhou"
}
"""

image.png

上述代码是我们最简单接收到的json格式数据,它有三个属性:namecountrycity,如果在我们系统里需要使用到4个参数nameagecountrycity,如果接收到的json里根本我们需要的属性age,那么用可选链的方式,我们就可以马上知道,而不至于系统报错。

可选链的其他使用


如果对象是是数组或者字典类型,我们还可以使用可选链的下标方式调用或者修改数组或者字典的值。

class Model {
    var sampleModels = ["前端", "后端", "安卓", "iOS"]
}
var model: Model? = Model()
let category = model?.sampleModels[0]
print("\(String(describing: category))")

上述代码中,我们定义了一个Model类,声明了一个变量数组,并赋予了一些值。

同样,我们声明一个可选项model,数据来源于Model类。然后声明了一个category常量使用可选链下标的方式获得sampleModels数组第一个值,我们打印输出看下效果。

image.png

本章代码


// SwiftOptionalChaining
import Foundation
import UIKit
class Person {
    var name: String = "文如秋雨"
    var age: Int = 26
}
var person: Person? = Person()
if ((person?.name) != nil) && (person?.age) != nil {
    print("name和age的值不为空")
} else {
    print("name和age的值为空")
}
let json = """
{
"name": "Ricardo",
"country": "China",
"city": "Guangzhou"
}
“""
class Model {
    var sampleModels = ["前端", "后端", "安卓", "iOS"]
}
var model: Model? = Model()
let category = model?.sampleModels[0]
print("\(String(describing: category))")

以上就是本章的全部内容。

快来动手试试吧!

如果本专栏对你有帮助,不妨点赞、评论、关注~

相关文章
|
数据安全/隐私保护 Swift
Swift实用小册26: 正则表达式的使用
在本章中,你将学会常用的正则表达式的使用方法。
254 3
Swift实用小册26: 正则表达式的使用
|
存储 Swift
Swift实用小册25: 高级运算符之位运算符的使用
在本章中,你将学会高级运算符的位运算符的使用方法。
205 0
Swift实用小册25: 高级运算符之位运算符的使用
|
数据安全/隐私保护 Swift 索引
Swift实用小册24: AccessControl访问控制的使用
在本章中,你将学会AccessControl访问控制的使用方法。
147 0
Swift实用小册24: AccessControl访问控制的使用
|
Swift
Swift实用小册23: ARC自动引用计数机制的使用
在本章中,你将学会ARC自动引用计数机制的使用方法。
150 0
Swift实用小册23: ARC自动引用计数机制的使用
|
Swift
Swift实用小册22: OpaqueTypes不透明类型的使用
在本章中,你将学会OpaqueTypes不透明类型的使用方法。
243 0
Swift实用小册22: OpaqueTypes不透明类型的使用
|
Swift
Swift实用小册21: Generics泛型的使用
在本章中,你将学会Generics泛型的使用方法。
149 0
Swift实用小册21: Generics泛型的使用
|
存储 前端开发 Swift
Swift实用小册20: Protocol协议的使用
在本章中,你将学会Protocol协议的使用方法。
221 0
Swift实用小册20: Protocol协议的使用
|
存储 前端开发 Swift
Swift实用小册19:Extension扩展的使用
在本章中,你将学会Extension扩展的使用方法。
313 0
Swift实用小册19:Extension扩展的使用
|
Swift
Swift实用小册18:NestedTypes嵌套类型的使用
在本章中,你将学会NestedTypes嵌套类型的使用方法。
186 0
Swift实用小册18:NestedTypes嵌套类型的使用
|
存储 Swift
Swift实用小册17:类型检查和类型转换
在本章中,你将学会类型检查和类型转换的使用方法。
128 0
Swift实用小册17:类型检查和类型转换

相关课程

更多