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)]这样的数据类型,不知多了一个小括号之后有什么不一样的地方?


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








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值