引入可选类型原因
- 在OC中若一个变量木有赋值,系统会给一个默认值,但是swift木有默认值(注:木有值和值为0是两个不同哒概念),所以引入一个可选类型.
可选类型的定义
- 一个变量, 分为有值和木有值.
可选类型可以保存nil. - 写法一:基本写法
let name: Optional<String> = "123"
- 写法二: 语法糖(常用)
let name2: String? = "123"
解包
解包就是获取可选变量的真实值
- 问题:若可选类型的值为nil,那么强制解包会报错
解包的三种慌法:
- 方法一:强制解包
//直接判断,简单粗暴. 缺点:使用时需要加上!
if kexuan != nil{
kexuan!
}
- 方法二:可选绑定
//此法较为优雅.先判断可选类型是否有值,若木有则返回false,若有值就强制解包,赋值给value
if let value = kexuan{
value
}
- 方法三:guard判断
//提高程序的可读性
func test(age:Int?){
guard let value = age else {
return
}
value
}
test(age: 16)
应用场景
// a. 把字符串转成int类型时,若为nil会报错.
let str = "a123"
let num = Int(str)
num
//b. 判断网址正确与否
let url = URL(string:"http://😋www.baidu.com")
//c. 创建图片啦
let image = UIImage(named:"abc")
//d. 函数问题
func test2 (a:Int?){
//内部考虑
}
//加入可选类型后,外界不需要处理
//let aaaa:Int? = 90
test2(a: 10)
注意:
- 可选类型不能直接用.
let image = UIImage(named:"abc")
//创建类,使用构造函数,所以imageView可以接收可选类型.
let imageView = UIImageView(frame: CGRect(x: 100, y: 100, width: 200, height: 200))
imageView.image = image
- ! 的作用
// ! 是指告诉编译器我知道它是可选类型,在使用前一定是赋值过的.可以直接用.
//但是这种转换方式不安全,一旦转换失败就会崩溃
var cc: Int! = 666
结语:本人程序媛小白一只,有激励才有成长😝,望众大神轻喷~