在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
一般我们在以下两种情况下会遇到!和?的使用 var number: Int? var str: String? 2.在对变量操作时 number?.hashValue str!.hashValue 由于这两种情况的意义不同,所以分开进行解释: 1>.声明变量时 var a: String var b = a // error :因为没有初始化a,a没有值 但是对于Optional的变量则不同,Optional的变量在声明时如果不初始化,Swift会自动将该变量初始化为nil。声明变量时在类型后添加?或者!,就是告诉编译器这是一个Optional的变量,如果没有初始化,你就将其初始化为nil var a: String? // a 为nil var b: String? // b 为nil var a_test = a // a_test 为nil var b_test = b // b_test 为nil 但是这两者之间还是有一些区别的,详细后面再讲。 2.对变量进行操作时 var arrayCount = dataList?.count 这时问号的意思类似于isResponseToSelector,即如果变量是nil,则不能响应后面的方法,所以会直接返回nil。如果变量非nil,就会拆Some(T)的包,取出原始值执行后面的操作。 var arrayCount = dataList!.count 这里的叹号和之前的问号则不同,这里表示我确定dataList一定是非nil的,所以直接拆包取出原始值进行处理。因此此处如果不小心让dataList为nil,程序就会crash掉。 回到上面声明时?和!区别的问题上去 总结
|
请发表评论