guard let 和 if let
2018-11-12 本文已影响2人
叩首问路梦码为生
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
demo1(x: nil, y: nil)
demo2(x: 10, y: 10)
demo4()
/*
打印如下
0
老王你好
老王
20
*/
}
func demo1(x:Int?,y:Int?) {
// 如果有数值 打印数值 如果没有 用?? 后面替代
print((x ?? 0)+(y ?? 0))
let name :String? = "老王"
print((name ?? "") + "你好")
// ?? 优先级低 如果name 为nil 就用??后面替代 , 否则用 ??前面的数值
print(name ?? ""+"你好")
}
func demo2(x:Int?,y:Int?) {
if x != nil && y != nil {
//强制解包有风险
print(x!+y!)
}else
{
print("x或者y为nil")
}
}
/// mark----------- 取名 if-let
// if let 连用 判断对象的数值是否为nil {}内一定有值,可以直接使用,不需要解包
// if var 连用 可以对值修改
func demo4() {
let oName:String? = "老王"
let oAge : Int?=10 //=nil
// 判断不为nil
if oName != nil && oAge != nil {
print(oName! + String(oAge!))
}
//if let 连用
if var name = oName,
let age = oAge
{
// 进入分支之后一定有数值 不需要解包了 就是不为nil 的情况
name = "老李"
print(name+String(age))
}else
{
print("name 或者 age 为nil ")
}
}
/// mark----------- 取名 guard-let
func demo5() {
let oName:String? = "老王"
let oAge : Int?=10
// guard 守护一定有数值,如果没有则return 返回
guard let name = oName,
let age = oAge else {
print("姓名或者年龄为nil")
return
}
// 以下为满足条件的 不为nil的情况
// 有数值之后执行具体的的逻辑实现
print(name+String(age))
}
/// mark----------- 同名 if-let
func demo6(name:String? , age : Int?) {
if let name = name,
let age = age
{
// 非空 name 和nil 在这里有效 不需要解包
print(name+String(age))
}else
{
print("name 或者 age 为nil ")
}
}
/// mark----------- 同名 guard-let
func demo7(name:String? , age : Int?) {
// let name:String? = "老王"
// let age : Int?=10
// guard 守护一定有数值,如果没有则return 返回
// 使用同名变量接收数值 不需要解包
guard let name = name,
let age = age else {
print("姓名或者年龄为nil")
return
}
// 非空 name 和age 在这里有效 不需要解包
print(name+String(age))
}
}