在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
记录下这个知识点: 一般我们在一下两种情况会遇到 ? 和 !的使用 1,声明变量时 var number:Int?
var str:String?
2,在对变量进行操作时 number?.hasValue
str!.hasValue
下面就上面两种情况,简单解释下: a,声明变量时,如果不手动初始化,Swift是不会自动初始化该变量为一个默认值的, 如果不加?,在进入该页面的时候,会报错,错误提示就是有为初始化的变量,大家可以自己测验下 例如: var a: String var b = a // error :因为没有初始化a,a没有值 但是对于Optional的变量则不同,Optional的变量在声明时如果不初始化,Swift会自动将该变量初始化为nil。声明变量时在类型后添加?或者!,就是告诉这是一个Optional的变量。 加上?,例如: var a: String? // a 为nil var b: String? // b 为nil var a_test = a // a_test 为nil var b_test = b // b_test 为nil 简而言之就是加上 ? 就是变量初始化的时候自动nil,如果不加,Swift自动视为没有初始化,报错 Optional事实上是一个枚举类型,从下图可以看出,Optional包含None和Some两种类型,而nil就是Optional.None,非nil就是Optional.Some。如果Optional变量在声明时不初始化,Swift会调用init()来初始化变量为nil,而用非nil的值初始化变量时,会通过Some(T)把该原始值包装,所以在之后使用的时候我们需要通过解包取出原始值才能使用。 b,对变量进行操作时 var arrayCount = dataList?.count 这时问号的意思类似于isResponseToSelector,即如果变量是nil,则不能响应后面的方法,所以会直接返回nil。如果变量非nil,就会拆Some(T)的包,取出原始值执行后面的操作。 var arrayCount = dataList!.count 这里的叹号和之前的问号则不同,这里表示我确定dataList一定是非nil的,所以直接拆包取出原始值进行处理。因此此处如果不小心让dataList为nil,程序就会crash掉。
回到上面声明时?和!区别的问题上去 可选类型说明:
可选类型是swift一个特色,它表示一个变量有可能有值,也可能没有值(nil) 声明方式是“数据类型+问号” 而当腰使用一个可选类型的变量时,要在后面加感叹号!;
总结
|
请发表评论