美文网首页
Swift 巨坑隐式封包

Swift 巨坑隐式封包

作者: YJ_Wong | 来源:发表于2018-08-30 15:07 被阅读200次

    近期开发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,欢迎大家加入。

    相关文章

      网友评论

          本文标题:Swift 巨坑隐式封包

          本文链接:https://www.haomeiwen.com/subject/bcarwftx.html