可选项
1.可选项,一般也叫可选类型,它允许将值设置为nil
2.在类型名称后面加个问号?,来定义一个可选类型
var name:String? = "Jack"
name = nil
var age:Int?
age = 10
age = nil
var array = [1,15,40,29]
func get(_ index:Int)->Int? {
if index < 0 || index >= array.count {
return nil
}
return array[index]
}
print(get(1)) // Optional(15)
print(get(-1)) // nil
强制解包
截屏2021-10-21 下午3.12.53.png 截屏2021-10-21 下午3.13.14.png在上面两个例子中,age是可选类型,不管你是否初始化了,在对这个数据进行使用的时候,必须先解包,才能使用,否则会报错
截屏2021-10-21 下午3.14.58.png
可选项绑定(Optional Binding)
1.可以使用可选项绑定来判断可选项是否包含值
2.如果包含就自动解包,把值赋值给一个临时的常量(let)或者变量(var),并返回true,否则返回false
截屏2021-10-21 下午3.26.34.pngwhile循环中使用可选项绑定
var str = ["10","20","abc","-20","30"]
var index = 0
var sum = 0
while let num = Int(strs[index]),num >0 {
sum += num
index += 1
}
print(sum) // 30
空合并运算符 ??
截屏2021-10-21 下午3.39.13.png截屏2021-10-21 下午3.43.20.png
多个 ?? 一起使用
截屏2021-10-21 下午3.46.10.png??跟if let配合使用
let a:Int? = nil
let b:Int? = 2
if let c = a ?? b {
print(c)
}
// 类似if a! = nil || b != nil
if let c = a, let d = b {
print(c)
print(d)
}
// 类似 if a != nil && b != nil
可选项绑定案例
func login(_ info:[String:String]) {
let username: String
if let tmp = info["username"] {
username = tmp;
}else {
print("请输入用户名")
return
}
let password:String
if let tmp = info["password"] {
password = tmp
}else {
print("请输入密码")
return
}
print("\(username),\(password)")
}
这个是使用可选项绑定的一个使用案例,充斥着if/else
现在介绍一个guard语句,比起可选项绑定会好用一点,简洁一点
1.当guard语句的条件为false时,就会执行大括号里面的代码
2.当gurad语句的条件为true时,就会跳过guard语句
3.gurad语句特别适合用来“提前退出”
guard 条件 else {
// do something
退出当前作用域
// return\break\continue\throw error
}
func login2(_ info:[String:String]) {
guard let username = info["username"] else {
print("请输入用户名")
return
}
guard let password = info["password"] else {
print("请输入密码")
return
}
print("\(username),\(password)")
}
在上面这段代码中,可以看出比可选项绑定的方法简单很多,轻松实现功能
网友评论