专注收集记录技术开发学习笔记、技术难点、解决方案
网站信息搜索 >> 请输入关键词:
您当前的位置: 首页 > Swift

Swift可空(Optional)部类基础

发布时间:2011-06-30 07:28:46 文章来源:www.iduyao.cn 采编人员:星星草
Swift可空(Optional)类型基础

可空类型,对于熟悉C#的同学一定不会陌生。在C#里面值类型都是不能为空的,比如int类型默认为0,bool默认为false。但是我们给int加上?后,就是一个可空类型了。

那么Swift里面呢。Swift里面没有区分值类型,引用类型(或许有,可能我还没看到这方面的资料)。那这个可空是怎么回事呢。原来在Swift里变量默认是不为空的。看代码:

你给一个String类型的变量付空值nil是会报错的。

 

那怎么让一个变量能为空呢,做法跟C#一样,加一个?。看代码:

 

那怎么取可空变量的值呢。这里就得拆解(unwarp)的概念了。比如你直接使用上面的name赋值给另外一个name变量的话是会报错的。要使用!取出其中的值。

 

既然变量是可空,那么我们使用的时候就免不了判空。判空也跟C#一样。

这里有2个问题要提一下。就是当你用 !=去判断不为nil的时候,一定要注意了。一定要在!=两边加上空格。不然是会报错的。因为如果不加空格的话,编译器没法区分是对变量进行拆解还是取非运算。还有一个,对于非空类型的变量,是直接不能进行判空的。因为上面说了,变量默认是不能为空的,所以非空类型的变量去判空是没有意义的。这里对于习惯C#/JAVA的同学就会比较坑了。因为我们已经养成了有null风险的地方进行null检查。如下:

 

一点思考:

  这里还是跟C#进行一下比较。.NET C#里类型分值类型,引用类型。引用类型的变量全部可以为空。值类型不能为空。如果想要为空,那就是用可空类型。那我们开发的时候,可以发现其实使用引用类型的时候比使用值类型的时候多多了。因为除了FCL的Class,我们自定义的各种Class也都是引用类型。但是Swift却正好相反,Swift里变量默认是不能为空的。也就是跟C#里的值类型一样,都要给默认值。需要空的时候就使用可空来处理。这里也可以看出来2门语言的设计者不同的两种思路。C#觉得对象的属性/变量大部分时候是存在可空需求的。而Swift觉得对象的属性大部分时候是不存在可空需求的。C#里变量想空就空,比较灵活。但是这样也造成在使用的时候不得不小心翼翼,所以我们到处都是if(obj!=null)这种代码。Swift的话就不用到处Check null,但是不够灵活。比如当我发现某个属性有可能为空的时候,还要去修改声明,修改完声明,前面使用到这个变量的地方的代码全都要改,要判空,要拆解。这两种方案可以说各有利弊,不过个人比较偏向C#。

 

友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。

其他相似内容:

热门推荐: