近期开发Swift中,遇到一个坑,记录下来避免其他人继续被坑。
先简单回顾下Swift中的封包解包功能。
用!标记变量表示该变量必定是有值的,在使用过程中不需要再解包,可以直接使用。
0C534105-DD4D-435A-8CD5-969385415E95.png用?标记变量表示该变量为optional,可能有值 可能是nil。使用时需要用!进行解包。
2.png
否则编译器就会报错。提示你需要unwrap
3.png回顾完毕,下面开始介绍坑。
5.png
发现诡异的现象了么,我用!去标记strTest。使用时照道理说是不需要再使用!进行解包的。但看第一个打印 “ some("abc") ”。他显然变成了optional,第二个打印使用!进行强制解包才取到正确答案。
这个现象叫做 “隐式封包” emmmmmmmmmmm.....
Which mean : 虽然在定义变量时定义为非Optional类型但是Swift3.0在使用 '=' 号 赋值时,左边的变量会被自动转换为Optional类型(称为隐式封包)!!!
知道我怎么发现这个秘密的么,请看下图。
6.png
在和小伙伴调试服务端的时候总是调不通,帮我查了下数据库后出现了以上的尴jian尬jie场景。
由于我用Swift时间还不长,暂时不知道Apple爹为啥这么设计。如有大神能在评论中告知 感激不尽。
建了Swift的QQ交流群 859978655,欢迎大家加入。
网友评论