因为在Swift中,在声明常量、变量时就需要赋初始值,所以这样声明var _dataSource :NSMutableArray = []后_dataSource已经声明为一个空数组,后面对它的使用中自然不会报错。
但是如果你这样声明var _dataSource :NSMutableArray! = nil
我们先不管这个!,首先你声明这个变量时给他赋值为nil,那么在后面使用_dataSource.addObject(people_1)时都没有初始化这个数组,报错是一定的。
我们再来看这个!,加了!后,这边变量就是一个可选类型,表示这个变量一定会有值,那么你又赋值为nil,所以这么声明没有问题,但是使用的时候问题就来了。
我们来看看错误提示unexpectedly found nil while unwrapping an Optional value,意思就是说当在给可选类型解包后发现他的值是nil,那么仍然属于没有实例化就去使用他,所以是错误的。
再来看看var _dataSource: NSMutableArray?这种方式。
?的作用也是将该变量定义为可选类型,但与!不同的是,他不确定有没有值,也就是说有可能是nil,也有可能有值。并且使用?声明变量时实际上是默认给变量先赋值为nil,在后面的代码中等待你去初始化。但是你又没有对它进行初始化,就直接使用了,那自然也会报错啦。