可选类型Optional
可选类型 (
Optional
) 只要看到我们的数据类型后面有?
!
含义
:可以有值也可以没有值,只有可选类型的变量才能赋值nilconvenience init?
返回一个可选类型的值注意
:在输出一个可选类型的值,会包装一个Optional
- 如果在变量后面加上一个
!
,就是告知系统改变量一定有值 !
称之为强制解包注意
:如果可选类型的变量没有值,而又进行强制解包,则会引发一个运行时的错误- 开发技巧:作为初学者,不要去纠结
?
!
??
这些符号,初期利用Xcode
开发工具的提醒功能来解决问题,后期深入研究这些符号什么时候使用?
什么时候使用我们的!
事例代码
let url = NSURL(string: "http://www.itcast.cn")
print(url!)
// URL 含有中文会创建不成功
let url2 = NSURL(string: "http://www.itcast.cn/传智")
//print(url2!)
if url != nil{
print(url)
}
可选绑定
格式:
if let 变量名称 = 可选类型变量 { }
优点:只要能进入大括号,哪可选类型的变量就一定有值
if let url3 = url {
//在if中不用对url3进行强制解包,在赋值的过程中系统已经进行解包了
print(url3)
}
自动解包
- 如果数据类型后面写的是
!
,那么在使用该变量时,系统会自动解包
let url4: NSURL! = NSURL(string: "http://www.itcast.cn")
print(url4)
//数据类型后面不要随意添加 ! 如果没有值会报错
let url5: NSURL! = NSURL(string: "http://www.itcast.cn/传智")
//print(url5)
总结
- 1.只要看到数据类型后面有
?
和!
就代表着是可选类型(Optional
) - 2.数据类后面是
?
和是!
的区别,是?
需要我们自己解包,是!
系统会帮我们解包 - 3.强制解包,(无论是自己强制解包或系统帮我们强制解包)变量没有值就会报错
- 4.先判断后解包,推荐使用可选绑定进行解包