美文网首页
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 巨坑隐式封包

    近期开发Swift中,遇到一个坑,记录下来避免其他人继续被坑。先简单回顾下Swift中的封包解包功能。 用!标记变...

  • Swift3.0 总结

    Swift不允许隐式类型转换 [玩转Swift字符串]:https://www.swiftmi.com/topic...

  • OC-Swift混编

    OC项目中添加Swift文件以及Swift项目中添加OC文件 OC类引用Swift类,需倒入隐式头文件 "xxx-...

  • IOS面试题

    01。swift和oc的区别 1)swift没有地址和指针的概念 2)swift对数据类型要求极为严谨,不会做隐式...

  • Swift-enum

    OC Swift 原始值 Raw Values 隐式原始值 Implicitly Assigned Raw Val...

  • swift4 基本

    swift中可变与不可变 1、不可变使用 let 修饰,swift语言可以隐式推断数据类型 let money =...

  • swift3.0基本语法(二)——数据类型及转换

    swift中不存在隐式类型转换,所有的类型转换都必须是显式的,这是因为swift是强语言,OC是弱语言。 一...

  • swift学习之数据转换

    swift 不存在隐式转换,只有显式转换。数据转换,比如把int 转换float或者double类型 查看Doub...

  • 类型转换

    Swift不允许隐式类型转换, 但可以使用显示类型转换(强制类型转换)

  • swift解决View切圆角(cornerRadius)切掉阴影

    最近转到了公司的一个swift项目,暂时放下了玩了一年的RN(巨坑,但是坑排玩后还是有点爽的),开始写上了原...

网友评论

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

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