Optional浅浅看

空值就是没有。

代码运行不报错,这是正常情况。

除了正常情况,还有很多不正常情况。


在范围之外。

在正常使用范围之外。

没有值。


如果:A+B=C是正常情况。

_+B=C就是不正常情况。

可能是因为A没有传过来

可能是因为A是可选类型,没解包

也可能是传过来的A不符合。导致得不到C。

如果无法控制A的品质,B规则也无法控制,只能从C做处理,才能保持平衡


可选值类型面对两个平衡点:

1️⃣没有值的平衡处理。

2️⃣代码不能在可选类型上运行,只能在基础类型上运行。

它没有破坏原有建立起来的规矩,也不合适,毕竟原来的规矩体量大,人员多。你去改变原有的,不划算。——所以,它所做的就是跳出原有的规矩,回到原有的规矩。


正常数据类型,不包含空。无法处理空,遇到空就报错。

可选值类型,在空和正常数据类型之间做了桥梁。但也只是桥梁。。。还是只能处理正常数据类型,空还是不能处理。非要说它有什么用,就是如果真为空,代码不是报错,崩溃。


实际情况包含两个部分:基础类型的正常运行。不能正常运行的空。

实际情况代表着代码的整体效果。即,代码要包含正常运行的部分和空。而正常和空是矛盾的。

空碰到正常就报错。

我们使用的还是正常代码。还是不能处理空。但我们整体代码要给空一个地方。

至于它是小数据为空,还是类为空,我们不用管,看具体情况。

我们要做的事情:

1️⃣判断实际情况,是正常类型,还是会出现空。
2️⃣如果是空,怎么用代码隔离空,正确解包使用。




正常数据类型->正常运作//正常结束点

不正常的开始->不正常运行//不正常结束点

不正常的开始->不正常运行 => 可选值类型->判断解包//正常结束点 或者 断

正常中的 不正常或者正常 =>可选值类型->判断解包)//正常中的 正常结束点 或者 断


总结:情况可以不正常,但我们的处理方式必须正!

积极主动,不掩饰的把nil提出来,保证了真,正。

把nil和正常数据类型合并成一个非正常数据类型,并把两个元素平移到可选值类型,这个过程是合理的。

把可选值类型判断,二分之一正常的能连接到正常数据的,不能连接的不连接。这个也是合理的。




从别的地方看到的不相关的信息:

1️⃣需要注意的是,String.Index类型是一个抽象类型,不能直接进行数值运算或比较。

如果需要进行索引之间的比较或计算,可以使用字符串的index(_:offsetBy:)方法来实现。

2️⃣Int64位和Int32位不能直接相加,需要同一类型才能相加。稍微点偏差都不行。

那你要说Int64位和Int64位相加,那肯定是可以直接相加点。

可选值类型可能跟上面两个情况一样。即:

可选值类型是抽象类型,            ->不能与正常数据类型相互作用。。

可选值类型不是正常数据类型,->不能与正常数据类型相互作用。

正常数据类型,它是确定的,     不包括nil。

可选值类型,    它是不确定的, 包括nil。


正常数据类型只能做正常的事情。

必须要保证正常数据类型不被污染!内容上不被污染,使用上不被污染。

包含nil这种不正常的事不能让正常数据类型来做,只能让不正常数据类型来做。可选值类型。。。




当可能出现值为空的情况,你没有做处理,那么当空真的来的时候,会出现崩溃,并且你还要去处理。

那么怎么处理值为空的情况?从代码来看,先做可选类型标记,然后走if let 安全检查。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值