//
// ViewControllerFour.swift
// Swift-(1)
//
// Created by xhc on 2018/6/20.
// Copyright © 2018年 xhc. All rights reserved.
//
import UIKit
classViewControllerFour:UIViewController{
overridefuncviewDidLoad() {
super.viewDidLoad()
demo4(name:"老王", age:18)
}
funcdemo4(name:String?, age:Int?) {
ifletname = name,letage = age {
// 非空的 name 和 age 仅在{}内有效!
print(name +String(age))
print("----------")
}
// guard let & if let 的技巧
// 使用同名的变量接收值,在后续使用的都是非空值,不需要解包
// 好处,可以避免起名字的烦恼!
guardletname = name,letage = ageelse{
print("姓名或者年龄为nil")
return
}
print(name +String(age))
}
// MARK: - guard 守卫/守护
// guard let 和 if let 刚好相反
funcdemo3() {
letoName:String? ="老王"
letoAge:Int? =nil
// guard let 守护一定有值,如果没有直接返回
guardletname = oName,letage = oAgeelse{
print("姓名或者年龄为nil")
return
}
// 代码执行至此,name 和 age 一定有值!
// 通常判断是否有值之后,会做具体的逻辑实现,通常代码多!
// 如果用if let 凭空多了一层分支,guard 是降低分支层次的办法
// guard 的语法是Swift2.0推出的!
print(name +String(age))
}
// MARK: - if let / var 连用语法,目的就是判断值
// 不是单纯的if
funcdemo2() {
letoName:String? ="老王"
letoAge:Int? =10
ifoName !=nil&& oAge !=nil{
print(oName! +String(oAge!))
}
// if let 连用,判断对象的值是否为nil ,{}内一定有值,可以直接使用,不需要解包
// if var 连用, {}可以对值进行修改
ifvarname = oName,letage = oAge {
name ="老李"
// 进入分支之后,name和age 一定有值,不需要解包
// name 和age 的作用域仅在{}中
print(name +String(age))
}else{
print("name 或者 age 为nil")
}
}
// MARK: - ??
funcdemo1(x:Int?,y:Int?) {
/**
?? 是一个简单的 三目
- 如果有值,使用值
- 如果没有值, 使用?? 后面的值替代
*/
print((x ??0) + (y ??0))
letname:String? ="老王"
print((name ??"") +"你好")
// ?? 操作符号的优先级'低',在使用的时候,最好加上()包一下
print(name ??""+"你好")
}
funcdemo(x:Int?,y:Int?) {
// 1.强行解包有风险
// print(x! + y!)
// 2.使用if判断
// 但是: 如果直接使用if,一不小心,会让代码很丑陋
ifx !=nil&& y !=nil{
print(x! + y!)
}else{
print("x 或者 y 为nil")
}
}
}