在本章中,你将学会OptionalChaining
可选链的使用方法。
前言
和Apple
官网或者网上分享的教程类文章不同,我将以实际开发角度讲述Swift
语言的一些概念和用法,方便大家更好地学习和掌握Swift
语言。
这同时也是对自己学习Swift
语言过程的知识整理。
如有错误,以你为准。
可选链的定义
可选链,是一种以安全的方式访问类的对象属性的方式。
可选链的作用,其实是为了在我们访问某个对象属性时,防止由于返回结果为nil
,即属性不存在而引发的系统报错或者闪退,因为Swift
不能空调用。
可选链的使用
我们新建一个PlayGround
项目,命名为SwiftOptionalChaining
。
可选链的使用方式是在属性、方法、或下标的可选值后面放一个问号“?
”,可选链可以将返回的结果包装成可选项,如果可选项有值,那么调用就会成功,输出的结果就会被包装成可选项。但如果可选项的值是 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的值为空") }
上述代码中,我们定义了一个Person
类,在Person
类中我们声明了两个变量:name
、age
,确定好类型并赋予了参数值。
如果我们需要访问Person
类的对象时,我们声明一个类型的Person
可选项的person
变量访问Person
类。
我们这里加一层判断,如果name
、age
的可选项返回值不为空,我们打印输出下内容,如果为空,我们也打印输出下内容。
这种方式能让我们快速定位到问题点,特别是当我们是通过网络请求或者接口接收json
格式的数据时,我们就需要通过可选链式调用访问对应的属性。示例:
let json = """ { "name": "Ricardo", "country": "China", "city": "Guangzhou" } """
上述代码是我们最简单接收到的json
格式数据,它有三个属性:name
、country
、city
,如果在我们系统里需要使用到4个参数name
、age
、country
、city
,如果接收到的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
数组第一个值,我们打印输出看下效果。
本章代码
// 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))")
以上就是本章的全部内容。
快来动手试试吧!
如果本专栏对你有帮助,不妨点赞、评论、关注~