swift ! 和 ? 的学习

刚开始学 这两个符号 不确定到底是否是可以互相替代 用的都混淆了 今天好好做个总结

如果声明一个变量 如下

var  name:String?  //只声明 没做初始化赋值 说明 当前name 是 nil

这说明 name  是一个可选类型 , name 可能是个字符串 也可能是 nil  (这个nil跟OC中的nil不同,不是指针,而是表示值不存在) ,

1 .那么调用方法、属性、下标索引等前面需要加上一个?,如果是nil值(不存在值),也就是Optional.None,会跳过后面的操作不执行,如果有值,就是Optional.Some可能就会拆包(unwrap),然后对拆包后的值执行后面的操作,来保证执行这个操作的安全性

如果 要在当且仅当 name 有值的情况下 进行一些操作, 要做判断

if name != nil{

     //do something neccessary

2. 如果代理方法是 @optional   那么 说明这也是个可选的代理方法 声明和使用的时候也要加?  

 

! 声明如下

var  telephoneStr :String!  

使用! 说明 telephoneStr  我们约定它一定是有值的 在 接下来的调用 赋值的时候 就不需要再添加? 和 !了 因为 telephoneStr  一定有值 .

但是 如果 使用过程没遵照约定  给它赋值为 nil  一定会 crash  

所以 我 提倡 如果有不确定性 做处理 或者赋值 时候 要进行预判断 或者使用 ?类型 ,这么说 是因为自己经验还是少 慢慢多磨合 能有进一步更准确的理解 

这么说 只是我学习的经验  我会不断充实完善有不妥的知识点

 

 

有两篇非常好的学习文章 分享

www.cocoachina.com/industry/20140605/8687.html

http://blog.csdn.net/woaifen3344/article/details/30244201

 

posted on   ACM_Someone like you  阅读(209)  评论(0编辑  收藏  举报

编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)

导航

< 2025年2月 >
26 27 28 29 30 31 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示