在学习swift的过程中,偶然发现一些问题,而官方的《The Swift Programming Language》中并没有找到相关说明,在此记录一下。
问题是在创建空数组的时候发现的,我们知道在swift中,想要创建空数组,就必须为它指定一个类型,除非当前的上下文已经包含了类型,也即:
var array = []<span style="white-space:pre"> </span>//这样的初始化会报错
var array = [Int]()<span style="white-space:pre"> </span>//正确初始化一个类型为[Int]的空数组
或者当前上下文中已有类型说明时,可以直接创建空数组,例如:
</pre><pre name="code" class="plain">var array = ["1","2"]<span style="white-space:pre"> </span>//array的类型已经被确定为[String]
array = []<span style="white-space:pre"> </span>//array为一个类型为[String]的空数组
1.
var array = [1,"2"]<span style="white-space:pre"> </span>//创建时指定两个类型不同的字面量元素
2.
var array1 = [NSObject]()//创建一个空的数组
3.
var array2 = [1,"2",anyObject]//创建时指定不同类型的字面量元素,且其中包含任意一个类的实例
究竟要说明什么问题呢?
以上三种方法,表面上都初始化成功了一个可以存放任意类型数据的数组,但是其实这三个数组的类型各不相同!
可以看到,方框中的三个数组array,array2和array3,其类型各不相同。
array是一个存放NSObject类型数据的数组,NSObject显然属于OC范畴,即这个数组中存放的是OC的对象。
array2则是[(NSObject)]类型,这种类型在《The Swift Programming Language》中并没有说明,不知道与[NSObject]有何不同?
array3则直接变成了OC中的NSArray类型。
而以上的情况对于其它类型的数据也是一样的,会产生类似于[Int]和[(Int)]这样的数据类型,不知多了一个小括号之后有什么不一样的地方?
猜测在字典类型上也会出现类似情况,但是实际测试发现,字典并未出现这样的情况:
原文链接:/swift/326083.html