今天遇到一个小问题,想自己做个小项目,在一个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()
Q2:关于数组的解包错误 fatal error: Can't unwrap Optional
时间: 2024-09-27 16:55:46