首页

「语法基础」关于可选择类型 optional 总结(二)

By 前端达人
Published in A-日常笔记
August 04, 2022
1 min read
「语法基础」关于可选择类型 optional 总结(二�)

变量后面跟个问号 ” ?”,在 swift 声明变量是个很常用的用法,对于 swift 初学者是个很困惑的事情,在 swift 中,这个用法称作可选择类型(optional) ,那怎么理解呢? optional 类型只有两种值:

  • 如果等号后面有赋值,则为具体的值
  • 如果没有赋值,则为nil(空)

如下图所示,我们来输出一个未赋值的可选择类型(optional)变量:

optional示例
optional示例

为什么需要可选类型的存在呢?因为 Swift 语言是一种十分强调类型安全的开发语言,编译器会尽最大的可能保证变量的类型和值的明确性。在 swift 语言中,如果我们声明了变量但未赋值,编译器则会直接报错并停止运行。

optional示例
optional示例

有些场景,我们需要”先声明变量后赋值“,你也许会用 if 语法先判断变量是否为空(nil)去判断,然后再进行其他的操作,但是 swift 语法会报错,如下所示:

optional示例
optional示例

上面的这种用法和判断,在我们的业务中很常用,如果我们要这样做的话,需要使用今天介绍的可选择类型 optional

optional示例
optional示例

如果要打印可选择类型 optional 变量,如下所示,会输出什么样的结果呢?

var test:Int? = 1
print(test)

//输出:Optional(1)

这样的结果不是我们期望的,怎么输出正常的值呢,这里我们需要使用另外一个符号感叹号 ”!“,如果出现在类型的后面代表一种隐式的语法结构(定义变量),在已定义的可选变量后,则是 optional 类型的拆包操作,示例如下,则能按照我们的期望正常输入。

optional示例
optional示例

在执行拆包操作时,需要确保拆包的值不为 nil 值,否则运行程序会报错,因此我们在拆包前,我们可以进行相关的判断,示例如下:

var test:Int? = 1
if test != nil {
    test!
}

除了以上这种写法,swift 还未我们提供了一种 if-let 的语法结构进行 optional 类型值的绑定操作,示例代码如下:

var test:Int? = 1
if let tmp = test {  //通过临时变量的形式进行拆包操作
    print("tempt:\(tmp)")
} else{
    test = 1
    print("test:\(test!)")
}

// 如果 test 有值,则输出 tempt:1,这里输出 tempt:1

var test:Int?
if let tmp = test {
    print("tempt:\(tmp)")
} else{
    test = 1
    print("test:\(test!)")
}
// 如果 test 无值,则输出 test:1

也许你觉得可选择值变量的操作比较麻烦,每次我们都要使用拆包操作,有没有比较简单的方法,如果一个变量初始值为 nil 时,并且在使用之前我们一定会先赋值,我们则可以使用 ” !“ 符号进行隐式解析可选值,后续我们使用这个变量就不需要进行拆包操作了,首先我们先看一段代码,如下所示:

var test:Int? = 1
test = 3
print(test + 1) //没有进行拆包,会变异异常

修正上诉错误,我们可以使用隐式解析变量,则会正常的输出我们期望的值

var test:Int!
test = 3
print(test + 1)

今天的介绍就到这里,optional 可选类型在项目中应用的十分灵活,只有在不断的练习中逐渐的掌握其用法。

版权声明

注:本文属于原创文章,版权属于「前端达人」公众号及 SwiftUI.cc 所有,谢绝一切形式的转载

更多精彩内容,请关注「前端达人」

欢迎关注「前端达人」
欢迎关注「前端达人」


Tags

#基础#swift
Previous Article
「语法基础」变量的定义与使用(var与let)(一)
前端达人

前端达人

专注前端知识分享

Related Posts

「语法基础」变量的定义与使用(var与let)(一)
August 03, 2022
1 min

前端学习站

前端达人官网VUE官网React官网TypeScript官网

公众号:前端达人

京ICP备16033841号-8