Q2:关于数组的解包错误 fatal error: Can't unwrap Optional

今天遇到一个小问题,想自己做个小项目,在一个controller中声明一个数组用于存储从数据库读来的内容,声明为 var bugCgs:[BugCategory],其实对应形式就是var className:[classType],很不巧,这样写会报错,如下图:



我自然知道在swift中变量都必须要有初始值(当然也不是一定的 例如在一个函数中就不需要)。xcode提示要不要加一个required initializer 'init(coder:)'? 由于对可选类型还是有一定理解,我不假思索改成 var className:[classType]!或者var className:[classType]? ok现在不报错了。但这无疑埋下了潜在危险,由于第一次运行时数据库没有内容,因此想插入一些测试数据进去,我是那么干的: 



是的 没有报错,这也导致最后运行时错误。请看错误:



answer: 
解决方法:声明数组时候应该申明为一个空数组var bugCgs:[BugCategory] = [BugCategory]()。错误原因也给出,因为当你声明一个可选类型数组时,是一个nil.看图:



可以看到隐式申明那是一个nil。那么对于一个nil的变量 你怎么调用append方法?至少我现在的理解是这样的。如果申明一个空数组(是一个实例,只不过里面只有0个元素),。至于单独onePeople虽然也是nil,但是下面我们采用一个实例化方法,这时onePeople不再是nil了,而是一个实例了。最后留一个问题,为什么用数组下标法也会报错,例如:

var peoples:[people]!

//以下是错误做法!!
peoples[0] = people()
peoples[1] = people()


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值