swift中数组元素类型问题

在学习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]的空数组


而有的时候,我们想在数组中存放不同类型的数据,就像OC中的NSArray一样,这时,我们有几种方法来初始化一个这样的数组:

1.

var array = [1,"2"]<span style="white-space:pre">	</span>//创建时指定两个类型不同的字面量元素

2.

var array1 = [NSObject]()//创建一个空的数组

3.

var array2 = [1,"2",anyObject]//创建时指定不同类型的字面量元素,且其中包含任意一个类的实例

究竟要说明什么问题呢?

上三种方法,表面上都初始化成功了一个可以存放任意类型数据的数组,但是其实这三个数组的类型各不相同!

从Xcode的自动提示中可以印证这一点:


可以看到,方框中的三个数组array,array2和array3,其类型各不相同。

array是一个存放NSObject类型数据的数组,NSObject显然属于OC范畴,即这个数组中存放的是OC的对象。

array2则是[(NSObject)]类型,这种类型在The Swift Programming Language》中并没有说明,不知道与[NSObject]有何不同?

array3则直接变成了OC中的NSArray类型。

而以上的情况对于其它类型的数据也是一样的,会产生类似于[Int]和[(Int)]这样的数据类型,不知多了一个小括号之后有什么不一样的地方?


猜测在字典类型上也会出现类似情况,但是实际测试发现,字典并未出现这样的情况:

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...