空值就是没有。
代码运行不报错,这是正常情况。
除了正常情况,还有很多不正常情况。
在范围之外。
在正常使用范围之外。
没有值。
如果: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 安全检查。