问答1 问答5 问答50 问答500 问答1000

swift 可选项(Optional)

提问网友 发布时间:2023-02-01 10:29
声明声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:1656858193@qq.com
1个回答
热心网友 回答时间:2024-05-06 09:07
可选项、一般也叫可选类型,它允许将值设置为nil

在类型名称后面加个 ?(问号)来定义一个可选项

例:

如上图所示:在默认情况下 是不允许将值置为nil
只有将其声明为可选类型才可以将值置为你了 如下两种方式

name 为可选类型 默认设置了初始值

age没有设置初始值 但是默认情况就是 nil

注意区分:
如果声名一个变量 但是没有赋初始值 我们就无法使用这个变量 如下

如果我们只是声名了这个变量 但是并没有给其赋值 它是没有默认值的 然后你去使用它 就会报错 如下

这一点 要和可选项分开 可选项如果不设置默认值 它的默认值就是 nil

比如 自定义一个函数 传入一个下标 返回数组对应的元素

如果返回值 定义为可选项
我们传入的下标 大于数组的长度 在此时就会返回nil

如果返回值 定义的不是可选类型
我们传入的下标 大于数组的长度 在此时就会奔溃报如下错误

强制解包(也就是取值) 就是直接在变量后面加一个 !(感叹号) 这样就把值给取出来了
例:直接打印变量

例:打印强制解包的变量

之所以产生上述原因 是因为 num 并不是Int类型的数据 它的类型是 Int?
所以 我们也无法直接与Int类型的数据相加
例:

注意:如果对一个可选项 值为nil 的变量 进行强制解包 也会报错 所以我们在强制解包的时候一定要确定 变量值不为 nil

概念:
1、可以使用可选项绑定来判断可选项是否包含值
2、如果包含就自动解包,把值赋给一个临时的常量(let)或者变量(var),并返回true,否则返回false

例:将字符串强转int (结果是 有可能转换成功 也有可能转换失败 )

例:根据key值到字典中取出对应的value (结果 如果有对应的key 则取出 如果没有对应的key 则返回nil)

规则:
a ?? b
1、 a 是可选项
2、b 是可选项 或者 不是可选项
3、b 跟 a 的存储类型必须相同
如果 a 不为nil,就返回 a
如果 a 为nil,就返回 b
如果 b 不是可选项,返回 a 时会自动解包

例1: a为可选项 初始值不为nil b (可以是可选项 也可以不是可选项)

例2: a为可选项 初始值为nil b 是可选项

例3: a为可选项 初始值为nil b 不是可选项

例4: a为可选项 初始值不为nil b 不是可选项

所以 我们在使用 空合并运算符 ?? 来获取可选项的值时 后面经常会跟一个与 可选项 值类型相同的 非可选项
如下

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

我现在要做个ERP的实验报告 哪位兄弟帮帮我 金融与经济的关系是什么? 怎么更改医保经办机构 北京地区个人如何修改医保定点医院??? 医保定点网上怎么操作 五线红外线四条竖线为什么有一线光很弱 新业电子厂生产的嵩田红外线的五线如何接线? 多宽的缸能养萨伊蓝 110.50的鱼缸养几条萨伊蓝 120缸养几条萨伊蓝 关于ORACLE时间的基础知识,求助 现在有一个考试 都是Oracle的基础知识,我没 switch宝可梦朱紫有没有妙蛙种子 杰尼龟和蒜头王八的关系 封禁了怎么解除 抖音号永久封禁如何解除? 被封怎么可以解除 如何才能将被封的解封? 高速护坡90公里大概有多少多少平方 高速护坡一公里多少方 创建索引选择合适的可选项 上海到大庆直达飞机多少钱 现在坐飞机从上海到哈尔滨要多少时间? 怎么关掉电脑防火墙? 小米平板上如何查看小米账号? 塑料壶黄酒十五公斤可以上高铁吗? 修一修家庭服务哪里都能下单吗 维修热水器上门附近电话24小时 家庭维修服务哪些靠谱 LED灯具电子元器件常用型号有哪些? 梦见和不认识的人成为了好朋友 梦见和不认识的人做朋友生活 梦见不认识的人成为好朋友 梦见和不认识的男人成了朋友 梦见和不认识的人谈朋友 梦见跟不认识的人像朋友 梦见和不认识的男人谈朋友 太极五环是什么意义 格力空调换气怎么用 格力空调怎么换气而且不用冷风